【发布时间】:2016-11-18 22:26:08
【问题描述】:
我正在使用 Json.NET (8.0.3),我正在尝试将 CamelCasePropertyNameContractResolver 与 JsonConvert.DeseralizeObject() 一起使用,以便我可以读取带有驼峰属性的 JSON。这是 JSON 的示例。
{ "name":"somename", "type":"sometype" }
这是我要反序列化的类:
public class MyClass {
public string Name { get; private set; }
public string Type { get; private set; }
}
如果我使用 JsonConvert.DeseralizeObject,则 Name 和 Type 值为 null,因为从技术上讲,类属性名称与 JSON 属性名称不匹配。这是意料之中的。如果我添加 JsonProperty 属性,那么它将正确反序列化(也是预期的)。
public class MyClass {
[JsonProperty("name")]
public string Name { get; private set; }
[JsonProperty("type")]
public string Type { get; private set; }
}
我不想将 JsonProperty 属性放在所有属性上,所以我尝试了 CamelCasePropertyNameContractResolver。
JsonConvert.DefaultSettings = () => new JsonSerialierSettings {
ContractResolver = new CamelCasePropertyNameContractResolver()
};
MyClass value = JsonConvert.DeserializeObject<MyClass>(json);
MyClass 对象的 Name 和 Type 属性均为 null,这是意料之外的。如果我将设置器公开,那么它可以正常工作。
public class MyClass {
public string Name { get; set; }
public string Type { get; set; }
}
这里明显的答案是只保持 setter 公开,但如果我想要/需要让 setter 私有,我怎样才能让 CamelCasePropertyNameContractResolver 与私有 setter 一起工作?我做错了什么,还是这可能是一个错误?
【问题讨论】: