对象序列化成Json字符串 及 反序列化成对象

一、       

        public static string JsonSerializer<T>(T t)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream();
            ser.WriteObject(ms, t);
            string jsonString = Encoding.UTF8.GetString(ms.ToArray());
            ms.Close();
            return jsonString;
        }


        public static T JsonDeserialize<T>(string jsonString)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            T obj = (T)ser.ReadObject(ms);
            return obj;
        }

 

   示例:      

string jsonString = "[{\"Key\":\"USD\",\"Value\":\"美元\"},{\"Key\":\"GBP\",\"Value\":\"英镑\"},{\"Key\":\"EUR\",\"Value\":\"欧元\"}]";
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Dictionary<string, string>));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            Dictionary<string, string> jsonDic = (Dictionary<string, string>)ser.ReadObject(ms);
            foreach (var item in jsonDic)
            {
                Console.WriteLine("Key:{0}, Value:{1}", item.Key, item.Value);
            }

 

 

注:

1. 必须使用Framework4.0,

2. 引用:

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

 

二、.net 自带反序列化:只针对一个对象,而不能是数组(如:Dictionary<string, string>)

 

添加程序集:System.Web.Extensions

using System.Web.Script.Serialization;

 

public static T JsonDeserializeNet<T>(string jsonString)
{
JavaScriptSerializer ser = new JavaScriptSerializer();
return ser.Deserialize<T>(jsonString);
}

 

public static string JsonSerializeNet<T>(T t)
{
JavaScriptSerializer ser = new JavaScriptSerializer();
return ser.Serialize(t);
}

 

要对这三种方式分别作测试,必须要将相应的内库引用进来

 

(1)JavaScriptSerializer这个类是.Net内置的,属于System.Web.Script.Serialization这个命名空间下面。需要引用System.Web.Extensions这个dll。

(2)DataContract方式也是.net内置的,主要使用的DataContractJsonSerializer这个类,属于System.Runtime.Serialization.Json这个命名空间。需要引用System.Runtime.Serialization这个dll。

(3)Newtonsoft.Json是第三方的dll,但是Visual Studio 对它做了很好的支持。使用方式有两种:一种是去网上下载最新的dll,然后添加引用即可;第二种是直接使用NuGet安装这个包。方式如下:

 

测试总结:

(1)总的来说,DataContract和Newtonsoft.Json这两种方式效率差别不大,随着数量的增加JavaScriptSerializer的效率相对来说会低些。

(2)对于DataTable的序列化,如果要使用json数据通信,使用Newtonsoft.Json更合适,如果是用xml做持久化,使用DataContract合适。

(3)随着数量的增加JavaScriptSerializer序列化效率越来越低,反序列化和其他两种相差不大。

(4)后来发现当对象的DataTime类型属性不赋值时,DataContract和JavaScriptSerializer这两种方式序列化都会报错,而用Newtonsoft.Json方式可以正常序列化。所以看来在容错方便,还是Newtonsoft.Json比较强。

 

 

 

转载于:https://www.cnblogs.com/allonzh/p/3303580.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值