Десериализация объекта JSON с неизвестными полями
Вопрос похож на десериализацию 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, вероятно, из-за словаря.
Любая идея, что является лучшим решением, как сделать эту работу?
Заранее спасибо.
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
,