在Json String中获取不同对象的对象

时间:2019-06-09 10:11:17

标签: c# json

我有一个Json字符串,它具有如下对象A,B,C:

[{
"attr 1" : "val 1",
"attr 2" : "val 2",
  "B": {
    "attr 1": "val 1"
    "attr 2": "val 2"
    "C": {
      "attr 1": "val 1"
      "attr 2": "val 2"
    }
   }
}]

我有问题: 1.如何分割字符串以获取3类数据? 2.如何获取A类数据? 3.如何获取B类数据? 4.如何获取C类的数据?

1 个答案:

答案 0 :(得分:3)

您发布的JSON不太有效,因为它缺少一些逗号,但已修复:

[{
        "attr 1": "val 1",
        "attr 2": "val 2",
        "B": {
            "attr 1": "val 1",
            "attr 2": "val 2",
            "C": {
                "attr 1": "val 1",
                "attr 2": "val 2"
            }
        }
    }
]

如果您使用的是Visual Studio,则可以在新文件中编辑>选择性粘贴> JSON作为类粘贴,这将为您提供:

public class Rootobject
{
    public Class1[] Property1 { get; set; }
}

public class Class1
{
    public string Attr1 { get; set; }
    public string Attr2 { get; set; }
    public B B { get; set; }
}

public class B
{
    public string Attr1 { get; set; }
    public string Attr2 { get; set; }
    public C C { get; set; }
}

public class C
{
    public string Attr1 { get; set; }
    public string Attr2 { get; set; }
}

您可以删除类Rootobject,就像您尝试反序列化该类一样-由于没有名为Property1的属性JSON密钥,它将失败。

然后您可以使用https://www.newtonsoft.com/json将JSON字符串反序列化为新对象:

var obj = JsonConvert.DeserializeObject<Class1[]>(json);

var classB = obj[0].B;
var classC = obj[0].B.C;

我建议将Class1重命名为更有意义的内容!

编辑:您还需要使用[JsonProperty]属性修饰类属性,因为JSON键包含空格,即:

public class Class1
{
    [JsonProperty("attr 1")]
    public string Attr1 { get; set; }

    [JsonProperty("attr 2")]
    public string Attr2 { get; set; }

    public B B { get; set; }
}

以此类推...