c#中jeson字符串和OBJECT对象的相互转换

对于本问题   我用三步来分别说明实现过程

1、定义一个类---- 实现转换的具体方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;

namespace Test.JesonTest
{
    public static class JsonHelper
    {
        //定义json操作运算

        //将字jeson字符串转换为object对象
        public static T strToObject<T>(string jsonString)
        {
            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
            {
                return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
            }
        }

        //将object对象反序列为jeson字符串
        public static string objectToStr(object jsonObject)
        {
            using (var ms = new MemoryStream())
            {
                new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject);
                return Encoding.UTF8.GetString(ms.ToArray());
            }
        }
    }
}

说明:首先,当然是项目是3.5+的;必须添加引用:System.Runtime.Serialization 和 System.ServiceModel

2、创建一个OBJECT对象类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Test.JesonTest
{
    public class Person
    {
        public int id { get; set; }
        public string name { get; set; }
        public int age { get; set; }

       public Person() {
           id = 0;
           name = "xuhyuan";
           age = 88;
        }
    }
}

  3、具体调用实现实例

      前台.aspx页面html。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Testjeson.aspx.cs" Inherits="Test.JesonTest.Testjeson" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <label style="color: Purple">
            将Jeson字符串和Object之间的相互转换实现</label>
        <br />
        <br />
        <br />
        <br />
        <asp:Button ID="but_str_obj" runat="server" Text="将jeson字符串转换为Object" 
            onclick="but_str_obj_Click" />
              
        <asp:Button ID="but_obj_str" runat="server" Text="将Object换为jeson字符串转" 
            onclick="but_obj_str_Click" />
        <br /><br />
        <asp:textbox ID="txt_resoult" runat="server" Height="207px" 
            TextMode="MultiLine" Width="624px"></asp:textbox>
    </div>
    </form>
</body>
</html>

  c#页面后台代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script.Serialization;

namespace Test.JesonTest
{
    public partial class Testjeson : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        //将jeson字符串转换为object
        protected void but_str_obj_Click(object sender, EventArgs e)
        {
            string str_jeson = txt_resoult.Text.Trim();

            if (!string.IsNullOrEmpty(str_jeson))
            {
                List<Person> pes=new List<Person>();
                pes = JsonHelper.strToObject<List<Person>>(str_jeson);
               str_jeson="";
                for (int i = 0; i < pes.Count; i++)
                {
                    str_jeson += "id=" + pes[i].id + ";name=" + pes[i].name + ";age=" + pes[i].age + "<br /><br /><br />";
                }
            }

            txt_resoult.Text+=str_jeson;
        }

        //将object转换为jeson字符串
        protected void but_obj_str_Click(object sender, EventArgs e)
        {
            Person pe = new Person();
            List<Person> pes = new List<Person>();
            pes.Add(pe);
            pes.Add(pe); pes.Add(pe);
           
            //反序列化实现
            string json = JsonHelper.objectToStr(pes);
            txt_resoult.Text = json;

            // 序列化----利用js实现
            //JavaScriptSerializer jss = new JavaScriptSerializer();
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C/C++基础

ToString截取字符串的用法

string test1=test.ToString("F");//结果为343392590725.68,保留小数点后两位

902
来自专栏菩提树下的杨过

装箱与值类型虽然很容易理解,但是在实际使用中,并不总是能100%用对

public struct Point { private int m_x, m_y; public Poi...

1976
来自专栏技术博客

编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]

  本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html 。本文主要学习记录以下内容:

903
来自专栏前端侠2.0

学习表达式树笔记 原

文章地址:  http://www.cnblogs.com/Ninputer/archive/2009/08/28/expression_tree1.html

972
来自专栏跟着阿笨一起玩NET

用于查询的日期类型转换帮助类

本文转载:http://www.cnblogs.com/iamlilinfeng/p/3378659.html

782
来自专栏vue

委托初级篇——委托三步曲

842
来自专栏菩提树下的杨过

ruby学习笔记(3)--语法层面的先见之明

看了几天ruby,发现c#中很多一直被称道的语法特性,ruby早在几年前就有了:  1.c#中的params关键字 class Program ...

2145
来自专栏.NET开发者社区

.NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法

.NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法,总有一种适合你。 方式一 使用二进制流 using System; using System.IO...

2256
来自专栏跟着阿笨一起玩NET

嘿,原来不认识你,想不到你这么好用—说说.NET中被我忽视的方法

下面就说说被我忽视过的方法。当然,每个人的编程经历,涉猎面及对.NET的认知程度都不一样。所以,这只是一家之言,肯定有很多不足之处,欢迎大家批评指正。

641
来自专栏林德熙的博客

C# 16 进制字符串转 int

最近在写硬件,发现有一些测试是做 16 进制的字符串,需要把他转换为整形才可以处理。 本文告诉大家如何从 16 进制转整形。

1531

扫码关注云+社区