簡體   English   中英

JSON newtonsoft反序列化

[英]JSON newtonsoft deserialization

我必須解析以下格式的Web API。 請注意,我無法更改JSON的格式。 它將始終以以下格式出現:

{
    "somethingone": "abc",
    "somethingtwo": "abcde-1234",
    "information": {
        "report": [{
                "a": "1",
                "b": "2",
                "c": "3"
            },
            {
                "a1": "1a",
                "b2": "2a",
                "c3": "3a"
            }, {
                "a1": "1b",
                "b2": "2b",
                "c3": "3b"
            },
        ]
    }
}

當我嘗試在Newtonsoft中解析它時,出現以下錯誤消息:

無法將當前json對象反序列化,因為(eg {“ name”:“ value”})成為類型,因為該類型需要json數組(例如[1,2,3])才能正確反序列化。

我已經嘗試解決這個問題好幾天了,但無法解決。

在此問題中,您可能會將json解析為類的列表,例如List<ClassName> ,則應排除List <>,因為傳入的json中只有一個主對象

如果report數組中的項目不是固定的,則意味着這些項目的計數從1到N,則聲明每個項目的屬性很困難,並且您的類對象結構變得繁瑣。

因此,您需要收集“ Dictionary所有項目,以便它可以分析從1到N的項目。

這些類對象適合您的json。

class RootObj
{
    public string somethingone { get; set; }
    public string somethingtwo { get; set; }
    public Information information { get; set; }
}

class Information
{
    public Dictionary<string, string>[] report { get; set; }
}

你可以反序列化像

RootObj mainObj = JsonConvert.DeserializeObject<RootObj>(json);

Console.WriteLine("somethingone: " + mainObj.somethingone);
Console.WriteLine("somethingtwo: " + mainObj.somethingtwo);

foreach (Dictionary<string, string> report in mainObj.information.report)
{
    foreach (KeyValuePair<string, string> item in report)
    {
         string key = item.Key;
         string value = item.Value;

         Console.WriteLine(key + ": " + value);
    }
}

Console.ReadLine();

輸出:

在此處輸入圖片說明

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM