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

JsonConvert.DeserializeObject 数组问题

JsonConvert.DeserializeObject 数组问题

C#
手掌心 2022-11-21 20:05:35
我有这个 JSON,我正在尝试反序列化:{  "events": [    {      "eventName": "service-review-created",      "version": "1",      "eventData": {        "id": "XXXXXXbca843690a3015d3c0",        "language": "en",        "stars": 5,        "title": "I was particularly impressed by the...",        "text": "I was particularly impressed by the...",        "referenceId": null,        "createdAt": "2019-03-29T23:05:32Z",        "link": "https://api.trustpilot.com/v1/reviews/XXX",        "consumer": {          "id": "XXXXXX40000ff000a74b9e1",          "name": "XXX",          "link": "https://api.trustpilot.com/v1/consumers/5899b3140000ff000a74b9e1"        }      }    }  ]}这些是我的模型:public class Event{    public string eventName { get; set; }    public string version { get; set; }    public EventData eventData { get; set; }}public class EventData{    public string id { get; set; }    public string language { get; set; }    public int stars { get; set; }    public string title { get; set; }    public string text { get; set; }    public string referenceId { get; set; }    public DateTime createdAt { get; set; }    public string link { get; set; }    public Consumer consumer { get; set; }}public class Consumer{    public string id { get; set; }    public string name { get; set; }    public string link { get; set; }}当我尝试时:List<Event> events = JsonConvert.DeserializeObject<List<Event>>(jsonstring);我得到:无法将当前 JSON 对象(例如 { "name": "value" } )反序列化为类型 'System.Collections.Generic.List`1[LambdaFeedFunctions.Trustpilot.Models.Event]' 因为该类型需要一个 JSON 数组(例如 [ 1,2,3]) 正确反序列化。要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,也不是像这样的集合类型一个数组或列表),可以从 JSON 对象反序列化。JsonObjectAttribute 也可以添加到类型以强制它从 JSON 对象反序列化。我不确定我需要更改什么才能使其正常工作。
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

使用Json2CSharp


public class Consumer

{

    public string id { get; set; }

    public string name { get; set; }

    public string link { get; set; }

}


public class EventData

{

    public string id { get; set; }

    public string language { get; set; }

    public int stars { get; set; }

    public string title { get; set; }

    public string text { get; set; }

    public string referenceId { get; set; }

    public DateTime createdAt { get; set; }

    public string link { get; set; }

    public Consumer consumer { get; set; }

}


public class Event

{

    public string eventName { get; set; }

    public string version { get; set; }

    public EventData eventData { get; set; }

}


public class RootObject

{

    public List<Event> events { get; set; }

}

然后


RootObject rootEvents = JsonConvert.DeserializeObject<RootObject>(jsonstring);

您现在可以通过以下方式访问您的活动:


rootEvents.events


查看完整回答
反对 回复 2022-11-21
?
三国纷争

TA贡献1804条经验 获得超7个赞

您的 JSON 有一个RootObject,这将需要另一个包装器 RootObject类才能如前所述正确反序列化。


或者,如果您可以更改 JSON 结构以发送数组(不带RootObject),如下所示,它应该可以正常解析。


[

  {

    "eventName": "service-review-created",

    "version": "1",

    "eventData": {

      "id": "XXXXXXbca843690a3015d3c0",

      "language": "en",

      "stars": 5,

      "title": "I was particularly impressed by the...",

      "text": "I was particularly impressed by the...",

      "referenceId": null,

      "createdAt": "2019-03-29T23:05:32Z",

      "link": "https://api.trustpilot.com/v1/reviews/XXX",

      "consumer": {

        "id": "XXXXXX40000ff000a74b9e1",

        "name": "XXX",

        "link": "https://api.trustpilot.com/v1/consumers/5899b3140000ff000a74b9e1"

      }

    }

  }

]


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 221 浏览

添加回答

举报

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