JSON newtonsoft 反序列化

我必须解析以下格式的 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 对象反序列化,因为(例如{“name”:“value”})转换为类型,因为该类型需要一个 json 数组(例如 [1,2,3])才能正确反序列化。


几天来我一直试图解决这个问题,但无法解决这个问题。


长风秋雁
浏览 125回答 2
2回答

ABOUTYOU

在这个问题中,您可能会将您的 json 解析为您的类列表,就像List<ClassName>您应该排除 List<> 一样,因为您在传入的 json 中有单个主要对象

凤凰求蛊

如果您的数组中的项目report不固定意味着这些项目的计数从 1 到 N,那么为每个项目声明属性很困难,并且您的类对象结构变得乏味。因此,您需要收集所有物品,Dictionary以便它可以解析您的物品从 1 到 N。这些类对象适合您的 json。class RootObj{&nbsp; &nbsp; public string somethingone { get; set; }&nbsp; &nbsp; public string somethingtwo { get; set; }&nbsp; &nbsp; public Information information { get; set; }}class Information{&nbsp; &nbsp; 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){&nbsp; &nbsp; foreach (KeyValuePair<string, string> item in report)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string key = item.Key;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string value = item.Value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(key + ": " + value);&nbsp; &nbsp; }}Console.ReadLine();输出:
打开App,查看更多内容
随时随地看视频慕课网APP