为了账号安全,请及时绑定邮箱和手机立即绑定

JSON newtonsoft 反序列化

JSON newtonsoft 反序列化

C#
长风秋雁 2022-06-12 14:45:30
我必须解析以下格式的 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])才能正确反序列化。几天来我一直试图解决这个问题,但无法解决这个问题。
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

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



查看完整回答
反对 回复 2022-06-12
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

如果您的数组中的项目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();

输出:

//img1.sycdn.imooc.com//62a58bac0001777002140232.jpg

查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信