转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html      
 
NET通用JSON解析/构建类的实现(c#)
在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对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,我也为做特殊处理,感兴趣的朋友可自行实现。
 
                    
                     
                    
                 
                    
                 
                
 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号