【问题标题】:Deserialize Json using ToObject method results in default properties values使用 ToObject 方法反序列化 Json 会导致默认属性值
【发布时间】:2016-05-01 14:11:47
【问题描述】:

我正在尝试从 JObject 创建一个 .NET 对象,但我将对象的所有属性作为默认值(字符串为 null,int 为 0 等)

我正在创建一个简单的 Jobject:

var jsonObject = new JObject();
jsonObject.Add("type", "Fiat");
jsonObject.Add("model", 500);
jsonObject.Add("color", "white");

汽车类是:

public class Car
{
  string type {get;set;}
  int model {get ;set;}
  string color {get;set;}            
}

反序列化在这里:

Car myCar = jsonObject.ToObject<Car>();

但运行时的结果是默认值: Run time picture

我想知道为什么会这样,我应该如何正确地做到这一点,

谢谢

【问题讨论】:

    标签: c# .net json json.net


    【解决方案1】:

    您尚未为您的属性定义访问修饰符。 如果没有显式设置访问修饰符(例如:public protected internal private),属性将是私有的。

    Newtonsoft.Json 需要公共设置器才能设置您的属性的值。

    试试:

    public class Car
    {
        public string type { get; set; }
        public int model { get; set; }
        public string color { get; set; }
    }
    

    如果让您的 setter 公开不是您的选择。考虑this SO answer 中列出的其他选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 2014-10-06
      • 2018-11-02
      • 1970-01-01
      相关资源
      最近更新 更多