【发布时间】:2021-02-11 05:06:03
【问题描述】:
假设我有一个这样的 json
"inventory":{
"sh0001":{
"price":100
},
"sh0002":{
"price":50
}
}
我想用 Json.net 将它反序列化成这样的数据结构
class Store
{
public Dictionary<string, Item> inventory;
}
class Item
{
[JsonIgnore] public string id;
public int price;
}
我想使用字典键(例如“sh0001”)并将它们分配给值对象的 Id 变量(item.id = “sh0001”)。
一个明显的解决方案是添加一个类似Store.OnJsonDeserialized()的方法,并可能在工厂方法Store.FromJson(string json)中调用它,这样我们就不会忘记在反序列化后调用它......
public void OnJsonDeserialized()
{
foreach(var kvp in inventory)
kvp.value.id = kvp.key;
}
public static Store FromJson(string json)
{
var newObj = JsonConvert.DeserializeObject<Store>(json);
newObj.OnJsonDeserialized();
return newObj;
}
但是,如果我们现在想将 Store 类嵌入到另一个类(例如 Company)中,然后从 JSON 中反序列化呢?
class Company
{
public Store[] stores;
}
现在JsonConvert.DeserializeObject<Company>(json) 将无法按预期工作,并且不会分配 item.Id。
在这种情况下,有没有更好的方法来进行反序列化? 谢谢。
【问题讨论】:
-
你必须使用这个类Public Store [] stores;当您有商店列表时