在.NET Framework 3.5中已經提供了一個JSON對象的序列化工具,可是他是強類型的,必須先按JSON對象的格式定義一個類型,並將類型加上JSON序列化特性。本文將試圖提供一個高度靈活的JSON通用類型(JsonObject),實現對JSON的解析及序列化。編程
假設JSON對象內容以下:json
{ orders: { date: '21:31:59', name: 'Xfrog', books: [{ name: 'C# 網絡核心編程', publish: '2010-3-24' }, { name: 'C#入門經典中文版', publish: '2009-10-16' }] }, blog: 'http://www.cnblogs.com/xfrog' }
使用JsonObject來構建,可選擇如下三種方式:
//經過標準構造函數 JsonObject json = new JsonObject(); json["orders"] = new JsonProperty(new JsonObject()); json["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog"); JsonObject config = json.Properties<JsonObject>("orders"); json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString()); json["orders"]["name"] = new JsonProperty("Xfrog"); json["orders"]["books"] = new JsonProperty(); JsonProperty book = json["orders"]["books"].Add(new JsonObject()); book["name"] = new JsonProperty("C# 網絡核心編程"); book["publish"] = new JsonProperty("2010-3-24"); book = json["orders"]["books"].Add(new JsonObject()); book["name"] = new JsonProperty("C#入門經典中文版"); book["publish"] = new JsonProperty("2009-10-16");
方式二:
//經過回調函數簡化對象的構建 JsonObject json2 = new JsonObject((a) => { a["orders"] = new JsonProperty(new JsonObject((b) => { b["date"] = new JsonProperty(DateTime.Now.ToLongTimeString()); b["name"] = new JsonProperty("Xfrog"); b["books"] = new JsonProperty(); b["books"].Add(new JsonObject((c) => { c["name"] = new JsonProperty("C# 網絡核心編程"); c["publish"] = new JsonProperty("2010-3-24"); })); b["books"].Add(new JsonObject((c) => { c["name"] = new JsonProperty("C#入門經典中文版"); c["publish"] = new JsonProperty("2009-10-16"); })); })); a["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog"); });
方式三:
//經過字符串構建Json對象 JsonObject newObj = new JsonObject(jsonStr);
獲取Json對象屬性值的方法,也有三種方式
//經過泛型函數 Console.WriteLine(newObj["orders"].GetValue<JsonObject>()["books"].GetValue<List<JsonProperty>>()[1].GetValue<JsonObject>()["name"].Value); //經過屬性類型對應的屬性 Console.WriteLine(newObj["orders"].Object["books"].Items[1].Object["name"].Value); //若是屬性爲對象類型,可經過字符串索引簡化 Console.WriteLine(newObj["orders"]["books"][1]["name"].Value);
直接使用ToString函數,將JsonObject轉換爲Json字符串:
String jsonStr = json.ToString();
注意:
我在重載ToString函數時,並無將字符串轉換爲JavsScript字符串類型(即對須要轉義的字符的處理),固然,要實現也是極其簡單的。另外,對於帶String參數的ToString,我也爲作特殊處理,感興趣的朋友可自行實現。c#