![](/img/trans.png)
[英]Newtonsoft Json Deserialize Dictionary as Key/Value list from DataContractJsonSerializer
[英]Json deserialize Dictionary<key,value> return as null
快一點!
我有三個對象類。
public class Parent
{
public string name { get; set; }
public Children child{ get; set; }
}
public class Children
{
public Dictionary<string, item> item{ get; set; }
}
public class item
{
public string id { get; set; }
public string type { get; set; }
}
我正在使用的JSON字符串:
{
'name': 'Child1',
'Children': {
'item-1253': {
'id': 'car',
'type': 'car'
},
'item-4343': {
'id': 'car',
'type': 'car'
}......
}
}
用過的:
test = JsonConvert.DeserializeObject<Parent>(json);
輸出為"item": null
。 我可以問為什么? 如何訪問此項目對象中的所有屬性,因為每個子項將有多個項目,項目對象名稱是動態的,例如item_id12434
。 我想這個對象是獨立的,我該如何實現呢? 會這樣的嗎? List<Dictionary<string, item>>
修改您的類看起來像這樣,它將正確反序列化。
public static class Program
{
static void Main(string[] args)
{
string str = @"{
'name': 'Child1',
'Children': {
'item-1253': {
'id': 'car',
'type': 'car'
},
'item-4343': {
'id': 'car',
'type': 'car'
}
}
}";
// Way 1) Using POCO
Parent parent = JsonConvert.DeserializeObject<Parent>(str);
// Way 2) Using dynamic
dynamic deserializedDynamicObject = JsonConvert.DeserializeObject<dynamic>(str);
// Way 3) Using JObject
JObject deserializedJObject = JsonConvert.DeserializeObject<JObject>(str);
List<JObject> childrenObjects = deserializedJObject["Children"]
.Cast<JProperty>()
.Select(x => x.Value)
.Cast<JObject>()
.ToList();
}
}
public class Parent
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("Children")]
public Dictionary<string, Item> Children { get; set; }
}
public class Item
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
}
修復示例: https : //dotnetfiddle.net/7TK008
請查看工作示例 - https://dotnetfiddle.net/eiMEkr
你提出了兩個問題:
錯誤的參數名稱兒童 - 應該是孩子
錯誤的字典對象定義
const string json = @"
{
'name':'Child1',
'child':{
'item':{
'dict_item':{
'id':'car1',
'type':'car2'
}
}
}
}";
var test = JsonConvert.DeserializeObject<Parent>(json);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.