[英]Iterating a JSON object array name value pair in c#
我从一个类似的问题这里举了这个例子:
但是我的数据格式有点不同,它有数组括号。
如前所述,我可以有数量不确定的条目,我想遍历条目并根据定义的类将数据结构提取到对象的数组/列表中。
{
"-KeArK3V02mXYWx2OMWh" : [{
"Description" : "this is a description",
"Location" : "Atlanta",
"Name" : "Event One",
"Time" : "2017-03-01T21:53:12.924645Z"
}],
"-KeAtCNF_rmewZ_U3PpH" : [{
"Description" : "another description",
"Location" : "Charlotte",
"Name" : "Event Two",
"Time" : "2017-03-01T22:01:25.603547Z"
}],
"-KeAtd8CQW_EfH3Sw4YQ" : [{
"Description" : "description goes here",
"Location" : "Toronto",
"Name" : "Event Three",
"Time" : "2017-03-01T22:03:19.3953859Z"
}]
}
我有一个称为Event的类,其定义如下
class Title {
public string Description { get; set; }
public string Location { get; set; }
public string Name { get; set; }
public DateTime Time { get; set; }
}
那里给出的答案(我认为是正确的)不起作用
Dictionary<string, Title> elist = JsonConvert.DeserializeObject<Dictionary<string, Title>>(jsonString);
它给我一个错误:
无法将当前JSON数组(例如[1,2,3])反序列化为类型“标题”,因为该类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化。 要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“ value”}),也可以将反序列化类型更改为数组,或者将实现集合接口的类型(例如ICollection,IList)更改为List,例如List从JSON数组反序列化。 还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。 路径'-KeArK3V02mXYWx2OMWh',第2行,位置XX。
Json的结构存在问题。 您的json具有像Key和value这样的格式,但是value是按照json格式的数组。 您必须做以下事情。
Dictionary<string,Title[]> elist = JsonConvert.DeserializeObject<Dictionary<string, Title[]>>(jsonString);
以上解决方案是最简单的一种。
第二个解决方案。 (您必须根据需要进行修改,但当前的json可以使用)
public class TitleConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JArray jObject = JArray.Load(reader);
Title title = JsonConvert.DeserializeObject<Title>(jObject[0].ToString());
return title;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
if (objectType.Name == "Title")
return true;
return false;
}
}
现在使用像这样。
Dictionary<string,Title> elist = JsonConvert.DeserializeObject<Dictionary<string, Title>>(jsonString,new TitleConverter());
除非我丢失了某些内容,否则您链接了一个标题为“在C#中遍历JSON对象(不是数组)”的问题。
但是,您的JSON显然包含一个数组,您甚至注意到自己:
“但是我的数据格式有点不同,它有数组括号。”
因此,您只需要将Title
更改为Title数组( Title[]
):
Dictionary<string, Title[]> elist = JsonConvert.DeserializeObject<Dictionary<string, Title[]>>(jsonString);
如果您查看json,则可以清楚地看到其定义为对象数组(请查看'['和']'):
"-KeAtd8CQW_EfH3Sw4YQ" : [{
"Description" : "description goes here",
"Location" : "Toronto",
"Name" : "Event Three",
"Time" : "2017-03-01T22:03:19.3953859Z"
}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.