簡體   English   中英

Json反序列化詞典 <key,value> 返回null

[英]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

你提出了兩個問題:

  1. 錯誤的參數名稱兒童 - 應該是孩子

  2. 錯誤的字典對象定義

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM