JSON

C#对象转Json序列化

字号+ 作者:H5之家 来源:H5之家 2017-09-02 12:00 我要评论( )

最近在研究Android项目,其中涉及到Android中解析Json数据的问题,需要模拟网络中传递Json数据的模式,因为以前是.net的工程师,所以想着从.net的平台开发服务,

C#对象转Json序列化

时间:2013-06-26 10:20来源:未知 作者:admin 点击:次我要投稿  高质量的ASP.NET空间,完美支持1.0/2.0/3.5/4.0/MVC等

最近在研究Android项目,其中涉及到Android中解析Json数据的问题,需要模拟网络中传递Json数据的模式,因为以前是.net的工程师,所以想着从.net的平台开发服务,传递Json格式的数据。那么先来介绍一些什么是JSON。

JSON

  Json(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JS的一个子集。 Json采用完全独立于语言的文本格式。这使得Json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

  Json简单来说就是JS中的对象和数组,所以Json也存在两种结构:对象、数组。

  • Json对象:Json对象定义在花括号“{}”内,以Key:value键值对的形式存放数据,多个数据使用分号“;”分割。
  • Json数组:Json数组定义在方括号“[]”内,以字符串的形式存放数据,多个数据使用分号“;”分割。
  •  

    Json序列化与反序列化

      对于.Net而言,从3.5之后就提供了DataContractJsonSerializer类,需要引用DLL,System.Runtime.Serialization。使用方式很简单,需要知道待转换的对象的类型,然后通过MemoryStream流写入的方式转换。对于DataContractJsonSerializer对象而言,序列化和反序列化只需要了解两个方法即可,这两个方法都具有多放重载,适用于不同的环境,这两个方法是:

  • WriteObject:将指定对象序列化为Json数据,并将生成的 Json写入流中。
  • ReadObject:以 Json格式读取文档流,并返回反序列化的对象。
  •   使用DataContractJsonSerializer序列化对象和反序列化Json都比较简单,下面给出示例代码:

     

    getJsonByObject(Object obj) 2 { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream stream = new MemoryStream(); serializer.WriteObject(stream, obj); [] dataBytes = new byte[stream.Length]; 11 stream.Position = 0; 12 stream.Read(dataBytes, 0, (int)stream.Length); Encoding.UTF8.GetString(dataBytes); 15 } Object getObjectByJson(string jsonString, Object obj) 18 { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); serializer.ReadObject(stream); 25 }

     

      通过这个转换类,可以对对象进行序列化成Json和反序列化成对象。但是存在一个问题,就是对于集合类型的数据,可以序列化成Json,但是把这个Json反序列化则会失败,我在这里也没有找到更好的办法反序列化集合类型的数据。现在就一些常见.Net类型的数据进行序列化展示。

      新建一个获取数据的类JsonObject,在其中分别返回一个Person(id,name,age)对象、List<Person>对象、List<string>对象,List<Dictionary<string, object>>对象,分别看看序列化后的数据。

      JsonObject类:

     

    1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; WebDemo.Json 7 { JsonObject 9 { Person getPerson() 11 { 12 Person person = new Person(); 13 person.id = 20; ; 15 person.age = 24; 16 return person; 17 } List<Person> getPersonList() 19 { 20 List<Person> personList = new List<Person>(); 21 Person person = new Person(); 22 person.id = 20; ; 24 person.age = 24; 25 Person person2 = new Person(); 26 person2.id = 30; ; 28 person2.age = 34; 29 Person person3 = new Person(); 30 person3.id = 40; ; 32 person3.age = 54; 33 personList.Add(person); 34 personList.Add(person2); 35 personList.Add(person3); 36 return personList; 37 } List<string> getStringList() 39 { 40 List<string> stringlist = new List<string>(); ); ); ); 44 return stringlist; 45 } List<Dictionary<string,object>> getDicList() 47 { 48 List<Dictionary<string, object>> dicList = new List<Dictionary<string, object>>(); 49 Dictionary<string, object> dic1 = new Dictionary<string, object>(); , 17); , ); , 24); 53 Dictionary<string, object> dic2 = new Dictionary<string, object>(); , 18); , ); , 23); 57 Dictionary<string, object> dic3 = new Dictionary<string, object>(); , 19); , ); , 28); 61 dicList.Add(dic1); 62 dicList.Add(dic2); 63 dicList.Add(dic3); 64 return dicList; 65 } 66 } 67 }

     

      分别对JsonObject返回的数据进行序列化,可以看到结果:

    总结

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • JavaScript json对象与数组转换简单实现方法实例详解

      JavaScript json对象与数组转换简单实现方法实例详解

      2017-09-01 16:00

    • 数组array与对象object相互转换 PHP数组和Json之间的转换

      数组array与对象object相互转换 PHP数组和Json之间的转换

      2017-09-01 16:01

    • Qt canvas3d 学习之obj 模型转成json格式后无法显示的问题解决

      Qt canvas3d 学习之obj 模型转成json格式后无法显示的问题解决

      2017-09-01 16:00

    • MySQL 5.7 新增加的 JSON 特性对应的 json 方法

      MySQL 5.7 新增加的 JSON 特性对应的 json 方法

      2017-09-01 09:03

    网友点评