將會(huì)輸出:
{ "Name" : "Default", "Author" : { "Name" : "Jerry", "Age" : 15 }, "Posts" : [ { "Title" : "Post 1", "CreateTime" : "Fri, 01 Jan 2010 00:00:00 GMT" }, { "Title" : "Post 2", "CreateTime" : "Mon, 01 Feb 2010 00:00:00 GMT" }, { "Title" : "Post 3", "CreateTime" : "Mon, 01 Mar 2010 00:00:00 GMT" } ] }
當(dāng)然,您同樣可以定義一個(gè)匿名對象作為JSON輸出:
var value = new { v = JsonSerializer.SerializeObject(category, categoryContract) }; Console.WriteLine(JsonSerializer.Serialize(value));
是不是很簡單?
更多討論
以上代碼只是演示了序列化成JSON的功能,但是您應(yīng)該也可以了解反序列化的使用方式。目前JsonMe的功能就只有這么多,可以說非常簡單,但是我認(rèn)為已經(jīng)基本夠用,甚至在大部分情況下完整代替JavaScriptSerializer和DataContractJsonSerialzier是沒有什么問題的。
開發(fā)JsonMe恰好花了我五個(gè)小時(shí)(下午2點(diǎn)到7點(diǎn)),只有幾百行代碼(當(dāng)然還很粗糙),大部分還是用于合約配置的“骨架”,真正進(jìn)行對象屬性的賦值和轉(zhuǎn)化的代碼只有一百多行。JsonMe能夠如此簡約的原因,是因?yàn)檎驹贘avaScriptSerializer的肩膀上。說實(shí)話,JavaScriptSerializer其實(shí)提供了一個(gè)很好的基礎(chǔ),因?yàn)樗梢詫⒁欢蜫SON字符串轉(zhuǎn)化為Dictionary<string, object>與object數(shù)組間的嵌套,這正是JSON格式的本質(zhì)。當(dāng)然,為了實(shí)現(xiàn)簡單,我在JsonMe中創(chuàng)建了JsonObject和JsonArray兩個(gè)對象,分別繼承Dictionary<string, dynamic>和List<dynamic>,它們便作為JSON結(jié)構(gòu)的表現(xiàn)形式。
不過我也意識到,JavaScriptSerializer可能并不是一個(gè)合適的選擇,因?yàn)檫@會(huì)讓我們依賴System.Web.Extensions.dll。事實(shí)上在.NET平臺上有一個(gè)更獨(dú)立,更簡單的JSON結(jié)構(gòu)實(shí)現(xiàn),那就是Silverlight中的System.Json.dll。只可惜我們只能用它開發(fā)Silverlight程序。我打算在合適的時(shí)候,將mono中的System.Json.dll實(shí)現(xiàn)移植到.NET 3.5中,這樣JsonMe就可以擺脫對System.Web.Extensions.dll的依賴,并擺脫自定義的JsonObject和JsonArray,可以直接使用System.Json里的結(jié)構(gòu)。更重要的是,這可以讓JsonMe作用在Silverlight,甚至是基于MonoTouch的iOS開發(fā)中(很有可能還包括未來的MonoDroid)。
如果您感興趣的話,也不妨獲取JsonMe的源代碼和簡單示例,修改修改,嘗試嘗試。我認(rèn)為它還是相當(dāng)實(shí)用的。
本文鏈接:http://m.95time.cn/tech/program/2010/8019.asp
出處:老趙點(diǎn)滴
責(zé)任編輯:bluehearts
上一頁 輕量級JSON映射類庫 [3] 下一頁
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|