gpt4 book ai didi

c# - 无法将 Json 字符串反序列化为列表对象

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:59 24 4
gpt4 key购买 nike

我有一个像这样的 json 字符串:

{"bwEventList": {

"events": [

{
"summary" : "Leisure Classes Beginning Today",
"subscriptionId" : "",
"calPath" : "%2Fpublic%2Fcals%2FMainCal",
"guid" : "CAL-02a786e6-45f207c3-0147-11c6cf10-000074e3bedework%40lsu.edu",
"recurrenceId" : "",
"link" : "",
"eventlink" : "http://calendar.apps.lsu.edu/feeder/feeder/event/eventView.do?b=de&calPath=%2Fpublic%2Fcals%2FMainCal&guid=CAL-02a786e6-45f207c3-0147-11c6cf10-000074e3bedework%40lsu.edu&recurrenceId=",
"status" : "CONFIRMED",
"start" : {
"allday" : "true",
"shortdate" : "11/22/14",
"longdate" : "November 22, 2014",
"dayname" : "Saturday",
"time" : "12:00 AM",
"utcdate" : "20141122T060000Z",
"datetime" : "20141122",
"timezone" : ""
},
"end" : {
"allday" : "true",
"shortdate" : "11/22/14",
"longdate" : "November 22, 2014",
"dayname" : "Saturday",
"time" : "12:00 AM",
"utcdate" : "20141122T060000Z",
"datetime" : "20141122",
"timezone" : ""
}

我这样写我的模型:

    public class Event
{
[JsonProperty(PropertyName ="summary")]
public string summary { get; set; }
[JsonProperty(PropertyName ="subscriptionId")]
public string subscriptionId { get; set; }
[JsonProperty(PropertyName ="calPath")]
public string calPath { get; set; }
[JsonProperty(PropertyName ="guid")]
public string guid { get; set; }
[JsonProperty(PropertyName ="reccurenceId")]
public string recurrenceId { get; set; }
[JsonProperty(PropertyName ="link")]
public string link { get; set; }
[JsonProperty(PropertyName ="eventlink")]
public string eventlink { get; set; }
[JsonProperty(PropertyName ="status")]
public string status { get; set; }
[JsonProperty(PropertyName ="start")]
public Start start { get; set; }
[JsonProperty(PropertyName ="end")]
public End end { get; set; }
[JsonProperty(PropertyName ="location")]
public Location location { get; set; }
[JsonProperty(PropertyName ="contact")]
public Contact contact { get; set; }
[JsonProperty(PropertyName ="calendar")]
public Calendar calendar { get; set; }
[JsonProperty(PropertyName ="categories")]
public List<string> categories { get; set; }
[JsonProperty(PropertyName ="description")]
public string description { get; set; }
[JsonProperty(PropertyName ="cost")]
public string cost { get; set; }

}

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

public class Start
{
[JsonProperty(PropertyName ="allday")]
public string allday { get; set; }
[JsonProperty(PropertyName ="shortdate")]
public string shortdate { get; set; }
[JsonProperty(PropertyName ="longdate")]
public string longdate { get; set; }
[JsonProperty(PropertyName ="dayname")]
public string dayname { get; set; }
[JsonProperty(PropertyName ="time")]
public string time { get; set; }
[JsonProperty(PropertyName ="utcdate")]
public string utcdate { get; set; }
[JsonProperty(PropertyName ="datetime")]
public string datetime { get; set; }
[JsonProperty(PropertyName ="timezone")]
public string timezone { get; set; }
}

public class End
{
public string allday { get; set; }
public string shortdate { get; set; }
public string longdate { get; set; }
public string dayname { get; set; }
public string time { get; set; }
public string utcdate { get; set; }
public string datetime { get; set; }
public string timezone { get; set; }
}

我正在尝试反序列化字符串,然后将列表中的每个事件显示到 XML(android) 上。下面是我如何获取字符串并将其反序列化

public async Task<List<ReveilleApp.Core.Models.Event>> GetItems(string feedUrl)
{
try{
using (WebClient webclient = new WebClient ()) {
WebClient n = new WebClient ();

var json = await n.DownloadStringTaskAsync (feedUrl);

var model = JsonConvert.DeserializeObject<List<ReveilleApp.Core.Models.Event>>(json);

return model;
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
return null;

}


}

返回项目以填充 ListView 。在异常(exception)情况下我得到这个错误

    Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[ReveilleApp.Core.Models.Event]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

我尝试了很多解决方案,但都没有用

最佳答案

您的模型与 Json 列不匹配。

莱昂内尔修正了模型:

但我也想对您的方法提出一些更正建议:

public async Task<RootObject> GetItems(string feedUrl)
{
try
{
using (WebClient webclient = new WebClient())
{
var json = await webclient.DownloadStringTaskAsync(feedUrl);
var model = JsonConvert.DeserializeObject<RootObject>(json);
return model;
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}

您也可以将其作为列表获取。

当你调用这个方法时

var root = GetItems(string feedUrl) as RootObject; // Ex call for method
if(root != null && root.bwEventList != null && root.bwEventList.Count > 0) // Just checking the conditions to make sure everthing is OK.
{
List<Event> eventsList = root.bwEventList.events; // Here you will get it as a list.
}

关于c# - 无法将 Json 字符串反序列化为列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27033236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com