Json.net无法加载属于类对象的某些属性?

注意:我正在添加此社区wiki条目以节省某人我刚刚调试此问题所花费的时间。

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

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

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

这是一个简短的小提示: https : //dotnetfiddle.net/4nZdGJ

虽然我花了一段时间来解决这个问题,但答案很简单。 反序列化时始终具有NULL值的对象属性具有私有setter 。 我让安装人员公开,问题就消失了。