C# 生成与解析Json字符串

前言:由于近期在与ERP对接接口中,需要使用Json传递数据,故在网上查询和自己做了实例测试,得出以下生成与解析Json字符串的总结:

一 . 原始方式:按照JSON字符串格式自己来生成与解析。

二 . 通用方式:使用开源的类库 Newtonsoft.Json(使用该方法首先需在“管理NuGet程序包“中下载:“Newtonsoft.Json”:程序包)

1>实现对象的序列化和反序列化

                          //首先新建对象Model  
class Class{ public int id { get; set; } public string name { get; set; } }
class Student{public int id { get; set; } public string name { get; set; } public Class Class { get; set; } }

* 序列化 (使用方法:public static string SerializeObject([NullableAttribute(2)] object value);)

                                  Student stu = new Student();//新建对象实例
                                  stu.id = 1;
                                  stu.name = "张三";
                                  stu.Class = new Class() { id = 1, name = "终极一班" };

                                  string json1 = JsonConvert.SerializeObject(stu);//将对象序列化,生成Json字符串
                                  Console.WriteLine(json1);
结果:json1 : {"id":1,"name":"张三","Class":{"id":1,"name":"终极一班"}}

*反序列化 (使用方法:public static T DeserializeObject<[NullableAttribute(2)]T>(string value);)

                                  Student stu2 = JsonConvert.DeserializeObject<Student>(json1);

2>匿名对象的序列化,反序列化

                                 //匿名对象的解析,  
                                 //匿名独享的类型  obj.GetType().Name: "<>f__AnonymousType0`2"  
                                  var obj = new { ID = 2, Name = "李四" };
                                  string json3 = JsonConvert.SerializeObject(obj);//-------------------------------------------------------------------------------------------------------------序列化
                                  Console.WriteLine(json3);
                                  object obj2 = JsonConvert.DeserializeAnonymousType(json3, obj);
                                  object id = obj2.GetType().GetProperty("ID").GetValue(obj2);//.GetType()--获取匿名类型    .GetProperty()--获取匿名类型参数  .GetValue()--获取参数值
                                  Console.WriteLine(obj2.GetType().GetProperty("ID").GetValue(obj2));
                                  object obj3 = JsonConvert.DeserializeAnonymousType(json3, new { ID = default(int), Name = default(string) });//------------------------------------------------反序列化
匿名对象解析,可以传入现有类型,进行转换  
                                 Student stu3 = new Student();
                                 stu3 = JsonConvert.DeserializeAnonymousType(json3, new Student());//匿名对象转换成现有对象
                                 Console.WriteLine(stu3.name);  


JSON生成实体类工具:点击>>

三 . 内置方式:使用.NET Framework 3.5/4.0中提供的System.Web.Script.Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化,很直接。

                               Project p1 = new Project() { Input = "stone", Output = "gold" };
                               JavaScriptSerializer serializer = new JavaScriptSerializer();
                               string jsonStr = serializer.Serialize(p1);  //序列化:对象=>JSON字符串
                               Response.Write(jsonStr);

                               Project p2 = serializer.Deserialize<Project>(jsonStr); //反序列化:JSON字符串=>对象
                               Response.Write(p1.Input + "=>" + p2.Output);

注意:如果使用的是VS2010,则要求当前的工程的 Target Framework要改成.Net Framework 4,不能使用Client Profile。当然这个System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感觉有点浪费资源。

  此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式

备注:

json格式字符串转换为实体类,大括号{}表示对象,[]数组表示列表。