Json.net 无法加载属于类对象的某些属性?
Posted
技术标签:
【中文标题】Json.net 无法加载属于类对象的某些属性?【英文标题】:Json.net failing to load certain properties belonging to a class object? 【发布时间】:2016-02-15 17:08:13 【问题描述】:注意:我添加此社区 wiki 条目是为了节省我刚刚调试此问题的时间。
我有一个具有多个公共属性的类对象。我可以使用 JSON.net 很好地序列化它。但是当我加载 JSON 文本并使用 JsonConvert.DeserializeObject<>
对其进行反序列化时,某些字段在序列化时肯定具有有效值时会设置为 NULL
。我手动检查了序列化的 JSON 字符串,我肯定在文本中看到了 NULL 属性的值。为什么会这样?
【问题讨论】:
【参考方案1】:默认情况下,Json.Net 仅对类的公共成员进行序列化和反序列化。如果您的属性有公共 getter 和私有 setter,那么这些属性将被序列化为 JSON,但不会反序列化回您的类。
解决此问题的简单方法是将您的 setter 公开,但这当然会破坏私有 setter 提供的不变性。如果您希望在仍然能够反序列化它们的同时保持 setter 的私密性,您可以使用 [JsonProperty]
属性来注释您的属性。这将允许反序列化器“看到”它们。
这里有一个简短的演示:https://dotnetfiddle.net/4nZdGJ
【讨论】:
【参考方案2】:虽然我花了一段时间才找到问题,但答案很简单。反序列化时始终具有 NULL 值的对象属性具有私有设置器。我将二传手公开,问题就消失了。
【讨论】:
如果你想让你的setter保持私有,你可以用[JsonProperty]
属性注释你的类属性,这将允许反序列化器“看到”它们。
谢谢布赖恩。这是一个很好的提示。如果您将该评论转化为答案,我会将其标记为已接受的答案,因为它比我的要好。以上是关于Json.net 无法加载属于类对象的某些属性?的主要内容,如果未能解决你的问题,请参考以下文章