.NET通用JSON解析/構建類的實現(c#)

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

相關文章
相關標籤/搜索