JavaScriptSerializer和DataContractJsonSerializer的比较 一般情况下就用JavaScriptSerializer

JavaScriptSerializer

名称空间:
using System.Web.Script.Serialization; 不需要再手动添加引用
不支持支持序列化Dictionary类型
不需要手动设置每个字段的名称, 例如 :
    [Serializable]
    public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public List<Course> course { get; set; }
    }
 
 
 
DataContractJsonSerializer
名称空间:
using System.Runtime.Serialization.Json;需要手动添加引用  System.Runtime.Serialization.;
支持序列化Dictionary类型;
需要手动设置每个字段的名称,例如:
    [DataContract(Name="student")]
    public class Student
    {
          [DataMember(Name = "Name")]
        public string Name { get; set; }
          [DataMember(Name = "Age")]
        public int Age { get; set; }
          [DataMember(Name = "Course")]
        public List<Course> course { get; set; }
         
    }
 
 
===============

JsonAbout:

复制代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Web.Script.Serialization; using System.Runtime.Serialization.Json;
namespace ConsoleApplicationTest { public class JsonAbout { public static T Json2ModelJS<T>(string JsonStr) { JavaScriptSerializer jss = new JavaScriptSerializer(); T userJson = jss.Deserialize<T>(JsonStr); return userJson; }
public static string Model2JsonJS<T>(T model) { JavaScriptSerializer jss = new JavaScriptSerializer(); string userJson = jss.Serialize(model); return userJson; } public static T Json2Model<T>(string jsonString) { using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) { return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms); } }
public static string Model2Json<T>(T jsonObject) { using (var ms = new MemoryStream()) { new DataContractJsonSerializer(typeof(T)).WriteObject(ms, jsonObject); return Encoding.UTF8.GetString(ms.ToArray()); } } } }
复制代码

  测试类:

复制代码
public class JsonModelDemo     {         public void Show()         {             string jsonA = "{\"IDA\":1,\"NameA\":\"A\",\"B\":{\"IDB\":2,\"NameB\":\"B\"}}";             string jsonB = "{\"Msg\":\"Test\",\"Data\":{\"IDA\":1,\"NameA\":\"A\",\"B\":[{\"IDB\":2,\"NameB\":\"B1\"},{\"IDB\":3,\"NameB\":\"B2\"}]}}";             Console.WriteLine("DataContractJsonSerializer:");             A a1 = JsonAbout.Json2Model<A>(jsonA);             B b1 = JsonAbout.Json2Model<B>(jsonA);             A a2 = JsonAbout.Json2Model<A>(jsonB);             B b2 = JsonAbout.Json2Model<B>(jsonB);             Output(a1);             Output(b1);             Output(a2);             Output(b2);
Console.WriteLine("JavaScriptSerializer:"); A a3 = JsonAbout.Json2ModelJS<A>(jsonA); B b3 = JsonAbout.Json2ModelJS<B>(jsonA); A a4 = JsonAbout.Json2ModelJS<A>(jsonB); B b4 = JsonAbout.Json2ModelJS<B>(jsonB); Output(a3); Output(b3); Output(a4); Output(b4); }
private void Output(A a) { Console.WriteLine("IDA:"+a.IDA + ", NameA:" + a.NameA); if (a.b != null) { Console.WriteLine("B:"+a.b.IDB+","+a.b.NameB); } } private void Output(B b) { Console.WriteLine("IDB:" + b.IDB + ", NameB:" + b.NameB); } } public class A { public int IDA { get; set; }
public string NameA { get; set; }
public B b { get; set; } }
public class B { public int IDB { get; set; }
public string NameB { get; set; } }
复制代码

  输出:

复制代码
DataContractJsonSerializer: IDA:1, NameA:A IDB:0, NameB: IDA:0, NameA: IDB:0, NameB: JavaScriptSerializer: IDA:1, NameA:A B:2,B IDB:0, NameB: IDA:0, NameA: IDB:0, NameB:
复制代码

  结论:JavaScriptSerializer可以识别关联的实体,其他的待验证。

posted on 2015-06-15 17:18  软件开发学习分享  阅读(174)  评论(0)    收藏  举报