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

时间:2015-11-14 01:43:53

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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