嵌套的JSON C#对象反序列化

4

i have the following json string (jsonString)

[
{
"name":"Fruits",
"references":[
    {"stream":{"type":"reference","size":"original",id":"1"}},
    ],
"arts":[
    {"stream":{"type":"art","size":"original","id":"4"}},
    {"stream":{"type":"art","size":"medium","id":"9"}},
    ]
}
]

并且以下是C#对象

    class Item
    {
        public string Name { get; set; }
        public List<Stream> References { get; set; }
        public List<Stream> Arts { get; set; }

        public Item()
        {
        }
    }

    class Stream
    {
        public string Type { get; set; }
        public string Size { get; set; }
        public string Id { get; set; }

        public Stream()
        {
        }
    }

以下是相关代码

        Item item = JsonConvert.DeserializeObject<Item>(jsonString);

当我运行代码时,它创建了正确数量的引用和文章,但每个流都有空值(类型 = null,大小 = null)。
这是使用json.net deserializeobject方法可能实现吗?还是我需要手动反序列化?
1个回答

9

编辑:好的,请忽略之前的回答。问题在于你的数组(references和arts)包含了对象,而这些对象又包含了相关数据。基本上你多了一层包装。例如,下面的JSON就可以正常工作:

[
{
"name":"Fruits",
"references":[
    {"Type":"reference","Size":"original","Id":"1"},
    ],
"arts":[
    {"Type":"art","Size":"original","id":"4"},
    {"type":"art","size":"medium","id":"9"},
    ]
}
]

如果您无法更改JSON,您可能需要在对象模型中引入新的包装器类型:

public class StreamWrapper
{
    public Stream Stream { get; set; }
}

那么请将您的Item类中的List<Stream>变量改为List<StreamWrapper>。这样有帮助吗?

Jon Skeet,感谢您的回复。我得到了和您一样的结果。问题在于对我来说...流对象属性要么为空,要么为0。也就是说item.References [0] .Type == null以此类推...您没有遇到这种情况吗? - lboregard
@Iboregard:啊,抱歉 - 我以为你的List<T>值是空的。正在调查... - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接