>我有以下json字符串
[["{"object":"user","entry":[{"uid":"823602904340066","id":"823602904340066","time":1429276535,"changed_fields":["feed"]}]}"],["{"object":"user","entry":[{"uid":"10152579760466676","id":"10152579760466676","time":1429278530,"changed_fields":["feed"]}]}"],["{"object":"user","entry":[{"uid":"10203227586595390","id":"10203227586595390","time":1429278537,"changed_fields":["feed"]}]}"],["{"object":"user","entry":[{"uid":"10203227586595390","id":"10203227586595390","time":1429278521,"changed_fields":["feed"]}]}"]]
JsonConvert.DeserializeObject<List<RootObject>>(jsonData);
当使用 Netwonsoft.json 将其转换为 json 对象时,我收到错误"无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型'Model.RootObject',因为该类型需要 JSON 对象(例如 {"名称":"值"})才能正确反序列化。
我正在使用以下类
public class RootObject
{
public List<Entry> entry;
}
public class Entry
{
public string uid;
public string id { get; set; }
public int time { get; set; }
public List<string> changed_fields { get; set; }
}
有些人可以告诉我哪里弄错了吗?
JSON 不包含任何RootObject
对象 - 它只包含字符串。你有一个字符串数组数组,其中每个"嵌套"数组只包含一个字符串,每个字符串都是RootObject
的 JSON 表示形式。
如果你能改变产生这个的东西,那将是有用的。否则,您可以使用类似(未经测试)的内容:
JArray array = JArray.Parse(json);
List<RootObject> roots =
array.Cast<JArray>()
.Select(innerArray => (string) innerArray[0])
.Select(text => JsonConvert.DeserializeObject<RootObject>(text))
.ToList();
为了清楚起见,我使用了两个Select
调用 - 基本上一个从每个嵌套数组中提取单个字符串,另一个将其转换为RootObject
。
因此,您有一个字符串数组数组。您需要进行两步解码。
第 1 步:
var stringLists = JsonConvert.DeserializeObject<List<List<string>>>(jsonData);
第 2 步:
IEnumerable<RootObject> objects = stringLists.SelectMany(innerList =>
innerList.Select(jsonString => JsonConvert.DeserializeObject<RootObject>(jsonString))