【问题标题】:nested json c# object deserializationc#嵌套json对象反序列化
【发布时间】:2010-08-30 04:18:36
【问题描述】:

我有以下 json 字符串 (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 方法或者我应该手动反序列化?

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

    编辑:好的,忽略上一个答案。问题是您的数组(引用和艺术)包含对象,而 又包含相关数据。基本上你有一层太多的包装。例如,这个 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&lt;StreamWrapper&gt; 变量而不是List&lt;Stream&gt;。这有帮助吗?

    【讨论】:

    • 乔恩斯基特,感谢您的回复。我得到和你一样的结果。问题是对我来说...... Stream 对象属性为 null 或 0。即 item.References[0].Type == null 等等......这不会发生在你身上吗?
    • @Iboregard:啊,对不起 - 我以为你的 List&lt;T&gt; 值是空的。正在调查...
    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多