Json.net實現方便的Json轉C#(dynamic動態類型)對象 Json.net實現方便的Json轉C#(dynamic動態類型)對象

之前須要將一段json字符串轉換爲C#對象時,通常都是定義一個與之對應的實體類來接收。這樣作有一個很大的缺點,就是當字符串特別長,屬性特別多,又有嵌套時,手敲這個實體類就很是痛苦。html

好比以前作的一個接收百度七每天氣預報的API,層層嵌套,很痛苦。json

C# 4.0 以後有了動態類型dynamic。用這個東西配合Json.net能夠實現不用定義實體類的json轉dynamic類型對象。post

如下示例須要先引用Newtonsoft.Json.dllurl

複製代碼
public class Person {
    public int Id { get; set; }
    public string Name { get; set; }
} 
class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();
        p.Id = 1;
        p.Name = "劉備";
        //C#對象轉Json
        string json = JsonConvert.SerializeObject(p);
        Console.WriteLine(json);    //{"Id":1,"Name":"劉備"}
         
        //此處模擬在不建實體類的狀況下,反轉將json返回dynamic對象
        var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
        Console.WriteLine(DynamicObject.Name);  //劉備
        Console.ReadKey();
    }
}
複製代碼

以上只是借用了一個實體類來得到一個簡單的JSON對象。spa

實際上,能夠徹底沒有這個Person類。.net

複製代碼
static void Main(string[] args)
{
    string json = "{\"Id\":1,\"Name\":\"劉備\",\"Age\":\"22\"}";
    //此處模擬在不建實體類的狀況下,反轉將json返回回dynamic對象
    var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
    Console.WriteLine(DynamicObject.Name);  //劉備
    Console.ReadKey();
}
複製代碼

若是未引用Microsoft.CSharp.dll,關於動態類型,VS可能會報錯。code

VS 能夠回編譯報錯:找不到編譯動態表達式所需的一個或多個類型。是否缺乏引用?htm

相關文章
相關標籤/搜索