日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C#--對(duì)象轉(zhuǎn)Json序列化

 昵稱10504424 2013-06-26

C#--對(duì)象轉(zhuǎn)Json序列化

前言

  最近在研究Android項(xiàng)目,其中涉及到Android中解析Json數(shù)據(jù)的問(wèn)題,需要模擬網(wǎng)絡(luò)中傳遞Json數(shù)據(jù)的模式,因?yàn)橐郧笆?net的工程師,所以想著從.net的平臺(tái)開(kāi)發(fā)服務(wù),傳遞Json格式的數(shù)據(jù)。那么先來(lái)介紹一些什么是JSON。

 

JSON

  Json(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于JS的一個(gè)子集。 Json采用完全獨(dú)立于語(yǔ)言的文本格式。這使得Json成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。

  Json簡(jiǎn)單來(lái)說(shuō)就是JS中的對(duì)象和數(shù)組,所以Json也存在兩種結(jié)構(gòu):對(duì)象、數(shù)組。

 

Json序列化與反序列化

  對(duì)于.Net而言,從3.5之后就提供了DataContractJsonSerializer類,需要引用DLL,System.Runtime.Serialization。使用方式很簡(jiǎn)單,需要知道待轉(zhuǎn)換的對(duì)象的類型,然后通過(guò)MemoryStream流寫(xiě)入的方式轉(zhuǎn)換。對(duì)于DataContractJsonSerializer對(duì)象而言,序列化和反序列化只需要了解兩個(gè)方法即可,這兩個(gè)方法都具有多放重載,適用于不同的環(huán)境,這兩個(gè)方法是:

  使用DataContractJsonSerializer序列化對(duì)象和反序列化Json都比較簡(jiǎn)單,下面給出示例代碼:

  通過(guò)這個(gè)轉(zhuǎn)換類,可以對(duì)對(duì)象進(jìn)行序列化成Json和反序列化成對(duì)象。但是存在一個(gè)問(wèn)題,就是對(duì)于集合類型的數(shù)據(jù),可以序列化成Json,但是把這個(gè)Json反序列化則會(huì)失敗,我在這里也沒(méi)有找到更好的辦法反序列化集合類型的數(shù)據(jù)。現(xiàn)在就一些常見(jiàn).Net類型的數(shù)據(jù)進(jìn)行序列化展示。

  新建一個(gè)獲取數(shù)據(jù)的類JsonObject,在其中分別返回一個(gè)Person(id,name,age)對(duì)象、List<Person>對(duì)象、List<string>對(duì)象,List<Dictionary<string, object>>對(duì)象,分別看看序列化后的數(shù)據(jù)。

  JsonObject類:

復(fù)制代碼
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 
 6 namespace WebDemo.Json
 7 {
 8     static public class JsonObject
 9     {
10         static public Person getPerson()
11         {
12             Person person = new Person();
13             person.id = 20;
14             person.name = "slive";
15             person.age = 24;
16             return person;
17         }
18         static public List<Person> getPersonList()
19         {
20             List<Person> personList = new List<Person>();
21             Person person = new Person();
22             person.id = 20;
23             person.name = "slive";
24             person.age = 24;
25             Person person2 = new Person();
26             person2.id = 30;
27             person2.name = "jack";
28             person2.age = 34;
29             Person person3 = new Person();
30             person3.id = 40;
31             person3.name = "damon";
32             person3.age = 54;
33             personList.Add(person);
34             personList.Add(person2);
35             personList.Add(person3);
36             return personList;
37         }
38         static public List<string> getStringList()
39         {
40             List<string> stringlist = new List<string>();
41             stringlist.Add("jack");
42             stringlist.Add("dick");
43             stringlist.Add("sean");
44             return stringlist;
45         }
46         static public 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>();
50             dic1.Add("id", 17);
51             dic1.Add("name", "jerry");
52             dic1.Add("age", 24);
53             Dictionary<string, object> dic2 = new Dictionary<string, object>();
54             dic2.Add("id", 18);
55             dic2.Add("name", "meimei");
56             dic2.Add("age", 23);
57             Dictionary<string, object> dic3 = new Dictionary<string, object>();
58             dic3.Add("id", 19);
59             dic3.Add("name", "damon");
60             dic3.Add("age", 28);
61             dicList.Add(dic1);
62             dicList.Add(dic2);
63             dicList.Add(dic3);
64             return dicList;
65         }
66     }
67 }
復(fù)制代碼

  分別對(duì)JsonObject返回的數(shù)據(jù)進(jìn)行序列化,可以看到結(jié)果:

總結(jié)

  最近一直在研究Android開(kāi)發(fā),所以涉及到Json的解析問(wèn)題,才會(huì)想著找找對(duì)于Json對(duì)象的序列化問(wèn)題。Json作為一個(gè)獨(dú)立于語(yǔ)言的文本,使用什么語(yǔ)言并不重要,這里只是需要把數(shù)據(jù)對(duì)象序列化為Json,傳遞給Android客戶端做準(zhǔn)備,雖然這種方式對(duì)于集合的反序列化存在問(wèn)題,但是不影響序列化與數(shù)據(jù)傳遞。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多