【问题标题】:Json.net failing to load certain properties belonging to a class object?Json.net 无法加载属于类对象的某些属性?
【发布时间】:2016-02-15 17:08:13
【问题描述】:

注意:我添加此社区 wiki 条目是为了节省我刚刚调试此问题的时间。

我有一个具有多个公共属性的类对象。我可以使用 JSON.net 很好地序列化它。但是当我加载 JSON 文本并使用 JsonConvert.DeserializeObject<> 对其进行反序列化时,某些字段在序列化时肯定具有有效值时会设置为 NULL。我手动检查了序列化的 JSON 字符串,我肯定在文本中看到了 NULL 属性的值。为什么会这样?

【问题讨论】:

    标签: c# json json.net json-deserialization jsonserializer


    【解决方案1】:

    默认情况下,Json.Net 仅对类的公共成员进行序列化和反序列化。如果您的属性有公共 getter 和私有 setter,那么这些属性将被序列化为 JSON,但不会反序列化回您的类。

    解决此问题的简单方法是将您的 setter 公开,但这当然会破坏私有 setter 提供的不变性。如果您希望在仍然能够反序列化它们的同时保持 setter 的私密性,您可以使用 [JsonProperty] 属性来注释您的属性。这将允许反序列化器“看到”它们。

    这里有一个简短的演示:https://dotnetfiddle.net/4nZdGJ

    【讨论】:

      【解决方案2】:

      虽然我花了一段时间才找到问题,但答案很简单。反序列化时始终具有 NULL 值的对象属性具有私有设置器。我将二传手公开,问题就消失了。

      【讨论】:

      • 如果你想让你的setter保持私有,你可以用[JsonProperty]属性注释你的类属性,这将允许反序列化器“看到”它们。
      • 谢谢布赖恩。这是一个很好的提示。如果您将该评论转化为答案,我会将其标记为已接受的答案,因为它比我的要好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2021-07-21
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多