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格式字符串转换为实体类,大括号{}表示对象,[]数组表示列表。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值