NET通用JSON解析/構建類的實現(c#)
在.NET Framework 3.5中已經提供了一個JSON對象的序列化工具,可是他是強類型的,必須先按JSON對象的格式定義一個類型,並將類型加上JSON序列化特性。本文將試圖提供一個高度靈活的JSON通用類型(JsonObject),實現對JSON的解析及序列化。 html
假設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來構建,可選擇如下三種方式:
方式一: json
//經過標準構造函數
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");
方式二: c#
//經過回調函數簡化對象的構建
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();
注意: post
我在重載ToString函數時,並無將字符串轉換爲JavsScript字符串類型(即對須要轉義的字符的處理),固然,要實現也是極其簡單的。另外,對於帶String參數的ToString,我也爲作特殊處理,感興趣的朋友可自行實現。this
源代碼下載url