1

这个问题类似于用未知字段反序列化 JSON,但我想改用内置的 DataContractJsonSerializer。

所以我有这样的JSON数据:

{
"known1": "foo",
"known2": "bar",
"more":{ "unknown12345": { "text": "foo", "label": "bar"},
         "unknown67890": { "text": "foo","label":"bar"}
       }
}

我以为我可以像这样执行数据合同:

 [DataMember(Name = "known1")]
        public string K1 { get;  set;  }
 [DataMember(Name = "known2")]
        public string K2 { get;  set;  }
 [DataMember(Name = "more")]
        public Dictionary<string,TwoStringMembersClass> More {   get; set;  }

而 TwoStringMembersClass 就是这样:

 [DataContract(Name = "TwoStringMembersClass ")]
    public class TwoStringMembersClass 
    {
        [DataMember(Name = "text")]
        public string Text { get;  set; }

        [DataMember(Name = "label")]
        public string Label {  get;  set; }
    }

但是似乎在 JSON.Net 中有效的方法似乎不适用于本机 JSON 解析器。在 ReadObject() 中,我得到一个 ArgumentException,可能是因为字典。

知道如何使这项工作的最佳解决方案是什么?

提前致谢。

4

1 回答 1

1

DataContractJsonSerializer不支持Dictionary<TKey, TValue>从 JSON 中的对象表示法反序列化。它仅支持将字典视为数组。因此,反序列化为您定义的类型所需的 JSON 应如下所示:-

{
    "known1": "foo",
    "known2": "bar",
    "more":[{ "Key": "unknown12345", "Value": { "text": "foo", "label": "bar"} },
            { "Key": "unknown67890", "Value": { "text": "foo","label":"bar"} }
           ]
}

如果传入 JSON 的架构无法更改,那么您将无法使用DataContractJsonSerializer.

于 2011-11-09T13:20:02.533 回答