快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰平台9411小游戏:C对象转Json序列化示例



媒介

近来在钻研Android项目,此中涉及到Android中解析Json数据的问题,必要模拟收集中通报Json数据的模式,由于曩昔是.net的工程师,以是想着从.net的平台开拓办事,通报Json款式的数据。那么先来先容一些什么是JSON。

JSON

Json(JavaScript Object Notation) 是一种轻量级的数据互换款式。它基于JS的一个子集。 Json采纳完全自力于说话的文本款式。这使得Json成为抱负的数据互换说话。易于人涉猎和编写,同时也易于机械解析和天生。

Json简单来说便是JS中的工具和数组,以是Json也存在两种布局:工具、数组。

Json工具:Json工具定义在花括号“{}”内,以Key:value键值对的形式寄放数据,多个数据应用分号&l澳门新葡亰平台9411小游戏dquo;;”瓜分。

Json数组:Json数组定义在方括号“[]”内,以字符串的形式寄放数据,多个数据应用分号“;&rd澳门新葡亰平台9411小游戏quo;瓜分。

Json序列化与反序列化

对付.Net而言,从3.5之后就供给了DataContractJsonSerializer类,必要引用DLL,System.Runtime.Serialization。应用要领很简单,必要知道待转换的工具的类型,然后经由过程MemoryStream流写入的要领转换。对付DataContractJsonSerializer工具而言,序列化和反序列化只必要懂得两个措施即可,这两个措施都具有多放重载,适用于不合的情况,这两个措施是:

WriteObject:将指定工具序列化为Json数据,并将天生的 Json写入流中。

ReadObject:以 Json款式读取文档流,并返回反序列化的工具。

应用DataContractJsonSerializer序列化工具和反序列化Json都对照简单,下面给出示例代码:

private static string getJsonByObject(Object obj)

{//实例化DataContractJsonSerializer工具,必要待序列化的工具类型

DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());//实例化一个内存流,用于寄放序列化后的数据

MemoryStream stream = new MemoryStream();//应用WriteObject序列化工具

serializer.WriteObject(stream, obj);//写入内存流中

byte[] dataBytes = new byte[stream.Length];stream.Position = 0;

stream.Read(dataBytes, 0, (int)stream.Length);//经由过程UTF8款式转换为字符串

return Encoding.UTF8.GetString(dataBytes);}

private static Object getObjectByJson(string jsonString, Object obj)

{//实例化DataContractJsonSerializer工具,必要待序列化的工具类型

DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());//把Json澳门新葡亰平台9411小游戏传入内存流中保存

MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));// 应用ReadObject措施反序列化成工具

return serializer.ReadObject(stream);}

经由过程这个转换类,可以对工具进行序列化成Json和反序列化成工具。然则存在一个问题,便是对付聚拢类型的数据,可以序列化成Json,然则把这个Json反序列化则会掉败,我在这里也没有找到更好的法子反序列化聚拢类型的数据。现在就一些常见.Net类型的数据进行序列化展示。

新建一个获取数据的类JsonObject,在此平分手返回一个Person(id,name,age)工具、List

工具、List工具,List>工具,分手看看序列化后的数据。

JsonObject类:

using System;

using System.Collections.Generic;using System.Linq;

using System.Web;

namespace WebDemo.Json{

static public class JsonObject{

static public Person getPerson(){

Person person = new Person();person.id = 20;

person.name = "slive";person.age = 24;

return person;}

static public List

getPersonList(){

List

personList = new List

();Person person = new Person();

person.id = 20;person.name = "slive";

person.age = 24;Person person2 = new Person();

person2.id = 30;person2.name = "jack";

person2.age = 34;Person person3 = new Person();

person3.id = 40;person3.name = "damon";

person3.age = 54;personList.Add(person);

personList.Add(person2);personList.Add(person3);

return personList;}

static public Liststring> getStringList(){

Liststring> stringlist = new Liststring>();stringlist.Add("jack");

stringlist.Add("dick");stringlist.Add("sean");

return stringlist;}

static public Liststring,object>> getDicList(){

Liststring, object>> dicList = new Liststring, object>>();Dictionarystring, object> dic1 = new Dictionarystring, object>();

dic1.Add("id", 17)澳门新葡亰平台9411小游戏;dic1.Add("name", "jerry");

dic1.Add("age", 24);Dictionarystring, object> dic2 = new Dictionarystring, object>();

dic2.Add("id", 18);dic2.Add("name", "meimei");

dic2.Add("age", 23);Dictionarystring, object> dic3 = new Dictionarystring, object>();

dic3.Add("id", 19);dic3.Add("name", "damon");

dic3.Add("age", 28);dicList.Add(dic1);

dicList.Add(dic2);dicList.Add(dic3);

return dicList;}

}}

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

getPerson():{"age":24,"id":20,"name":"slive"}

getPersonList():[{"age":24,"id":20,"name":"slive"},{"age":34,"id":30,"name":"jack"},{"age":54,"id":40,"name":"damon"}]

getStringList():["jack","dick","sean"]

getDicList():[[{"Key":"id","Value":17},{"Key":"name","Value":"jerry"},{"Key":"age","Value":24}],[{"Key":"id","Value":18},{"Key":"name","Value":"meimei"},{"Key":"age","Value":23}],[{"Key":"id","Value":19},{"Key":"name","Value":"damon"},{"澳门新葡亰平台9411小游戏Key":"age","Value":28}]]

总结

近来不停在钻研Android开拓,以是涉及到Json的解析问题,才会想着找找对付Json工具的序列化的实现。Json作为一个自力于说话的文本,应用什么说话并不紧张,这里只是必要把数据工具序列化为Json,通报给Android客户端做筹备,虽然这种要领对付聚拢的反序列化存在问题,然则不影响序列化与数据通报。

您可能还会对下面的文章感兴趣: