JSON反序列化可变数量的属性

时间:2015-10-28 20:50:09

标签: c# json json.net

我有一个来自第三方API的JSON类结构(只显示了问题部分):

"template": {
    "name": "MovieTemplate",
    "ruleName": "Movie Template",
    "zones": {
        "Products": {
            "type": "Record",
            "name": "Products",
            "content": "www.imagescloudsite.com/blahblah.gif"
            "records": [ … ]
        },
        "URL": {
            "type":"DVD",
            "name":"Bundle"
            "content": "www.imagescloudsite.com/blahblah.gif"
        }
    }
}

"区域"属性可以包含许多属性" 产品"," 网址","超人",&# 34;笛卡尔"等...

但是,我不知道哪些会有多少,因为这些是由我们的内容人员在一个特殊的控制面板中添加的。 Newtonsoft Deserializer抱怨,因为我有这样的模型,它显然没有捕获区域名称,如' Products'和'网址':

public class Zone
{
    public string Type { get; set; }
    public string Name { get; set; }
    public string Content { get; set; }
}

public class Template
{
    public string Name { get; set; }
    public string RuleName { get; set; }
    public List<Zone> Zones { get; set; }
}

关于如何使用NewtonSoft捕获区域名称的任何想法? 感谢。

3 个答案:

答案 0 :(得分:3)

将您的区域属性设置为字典,因为您事先不知道密钥,但确实知道其内容结构。

喜欢这样

$ cat x.c
asm (".globl A");
asm ("A = 0x42");
$ clang -c x.c
$ nm x.o
0000000000000042 A A

答案 1 :(得分:1)

如果您将Template类更改为以下内容该怎么办:

public class Template
{
    public string Name { get; set; }
    public string RuleName { get; set; }
    public Dictionary<string, Zone> Zones { get; set; }
}

然后,您可以通过条目的键访问该名称。

答案 2 :(得分:0)

使用动态将是一个不错的选择

/[A-Z]{1,58}/