Json 反序列化字典<键,值>返回为 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>>

固定示例: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);

将类修改为如下所示,它将正确反序列化。

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; }
}

相关内容

  • 没有找到相关文章

最新更新