如何应对具有一系列对象但不使用方括号的JSON字符串



我正在尝试对一个带有没有包含括号的数组的JSON字符串。

{ "id": "983f90j30909j3f",
  "moreInfo": {
      "info193802": { ... },
      "info920938": { ... },
      "info849028": { ... }
  }
}

这个" moreinfo"是带有动态钥匙的一系列项目,没有方括号告诉它是一个数组。

我试图用newtonsoft.json正常(JsonConvert.DeserializeObject<rootObject>())对其进行审理,但是由于此JSON数组并不是真正的数组,因此会引发错误。这是我的班级:

public class RootObject
{
    public string Id { get; set; }
    public MoreInfo MoreInfo { get; set; }
}

public class MoreInfo
{   
    public List<Info> InfoList{ get; set; }
}
public class Info
{
    properties...
}

我该如何进行审理?

更新根对象以使用IDictionary<string, Info>

public class RootObject {
    public string Id { get; set; }
    public IDictionary<string, Info> MoreInfo { get; set; }
}

动态键将是字典中的键。

一旦解析,您可以通过字典的键访问信息

Info info = rootObject.MoreInfo["info193802"];

newtonsoft可以正确解析数据。数据代表对象,它们恰好是相当深的。您可以完成几种方法,例如:

dynamic json = JsonConvert.DeserializeObject(response);
var info = json["moreinfo:info913802:example"].Value;

您的另一个选项是使用Visual Studio,让其创建一个可以验证的对象。

  1. 编辑
  2. 粘贴特殊
  3. 作为JSON

输出将是:

public class Rootobject
{
    public string id { get; set; }
    public Moreinfo moreInfo { get; set; }
}
public class Moreinfo
{
    public Info193802 info193802 { get; set; }
    public Info920938 info920938 { get; set; }
    public Info849028 info849028 { get; set; }
}
public class Info193802
{
    public string Example { get; set; }
}
public class Info920938
{
    public string Example { get; set; }
}
public class Info849028
{
    public string Example { get; set; }
}

我使用的源json是您的,一个例外:

{ "id": "983f90j30909j3f",
  "moreInfo": {
      "info193802": { "Example" : "Blah" },
      "info920938": { "Example" : "Blah" },
      "info849028": {"Example" : "Blah" }
  }
}

相关内容

  • 没有找到相关文章

最新更新