将 JSON 字符串转换为对象时出现问题



>我有以下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))

相关内容

  • 没有找到相关文章

最新更新