在.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#