【问题标题】:Deserializing Json document to C# objects将 Json 文档反序列化为 C# 对象
【发布时间】:2017-04-25 13:54:57
【问题描述】:

语言 C#。控制台应用程序。

我有一个以下格式的 json 文档:

{"Cars":{"Mercedes": 1,"BMW": 3,"Toyota": 0},"Bikes":{"Kawasaki": 5,"Pulsar": 4}}

我有以下课程:

    public class Vehicles  
    {  
     public Cars cars {get; set;}
     public Bikes bikes {get; set;} 
    }

    public class Cars
    {
        Dictionary<string, int> carcount {get; set;}
    }

    public class Bikes
    {
        Dictionary<string, int> bikecount {get; set;}
    }

我必须将 json 反序列化到类中。 我试过这个

Vehicles jsondata = JsonConvert.DesrializeObject<Vehicles>(jsonstring);

我将自行车和汽车中的字典都设为空。我知道我错过了一些非常基本的东西。但无法弄清楚到底是什么。
此外,json 字符串格式不能更改。但是类结构可以改变。

【问题讨论】:

    标签: c# json json.net c#-5.0 c#-6.0


    【解决方案1】:

    您没有名为carcountbikecount 的级别。相反,您可以立即获得字典。

    public class Vehicles  
    {
        public Dictionary<string, int> Cars {get; set;}
        public Dictionary<string, int> Bikes {get; set;}
    }
    

    请注意,属性名称区分大小写,因此在混合大小写时要非常小心。

    (按照in this answer 中描述的步骤,您可能会更轻松地完成此操作。不幸的是,这没有考虑到字典。它至少会给您一个起点,字典应该是。)

    【讨论】:

    • @John 和你的答案都是一样的,而且都是正确的。我之所以选择约翰的答案是因为他回答得早。
    • 如果其他人只是转储一些代码,则很难尽快发布。
    • 我确实认为与两者相比,问题是不言自明的。另外,我确实赞成您的回答,因为我觉得它比我的要好。
    • 我不是在抱怨@john。可惜用户投票的不是内容,而是谁先投票。此外,对于不了解绑定原则的用户来说,很难弄清楚它为什么会发生。他们只会使用您提供的代码,直到下一次遇到同样的问题。
    • 属性必须是public,否则不起作用。
    【解决方案2】:

    你需要这个:

    public class Vehicles
    {
        public Dictionary<string, int> Cars { get; set; }
        public Dictionary<string, int>  Bikes { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多