我可以使用Newtonsoft.Json进行严格的反序列化吗?

我正在使用Newtonsoft.Json来序列化/反序列化对象。
据我所知,如果类没有无参数构造函数,则反序列化无法成功。 例,

public class Dog { public string Name; public Dog(string n) { Name = n; } } 

对于下面这个类,代码正确生成对象。

 Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"Name\":\"Dog1\"}"); 

对我来说,令人惊讶的是,它也可以使用以下代码正确生成对象。

 Dog dog2 = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"name\":\"Dog2\"}"); Dog dog3 = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"n\":\"Dog3\"}"); Dog dog4 = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"N\":\"Dog4\"}"); 

现在我能想到的就是

  1. Json转换器在进行reflection时忽略了区分大小写。
  2. 此外,如果它面向构造函数,它用json字符串填充参数(就好像参数名称是json字符串)。 我不确定,但也许这就是他们称之为灵活的原因。

这是我的问题:

如果我的class级是这样的,

 public class Dog { public string Name; public Dog(string name) { Name = name + "aaa"; } } 

和生成对象

 Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"Name\":\"Dog1\"}"); 

然后创建对象给我dog1.Name = "Dog1aaa"而不是dog1.Name = "Dog1" 。 如何正确反序列化对象(可能在创建对象后覆盖Name )? 有没有办法严格反序列化?

提前致谢

如何正确反序列化对象(可能在创建对象后覆盖Name)? 有没有办法严格反序列化?

您可以声明另一个构造函数并强制Json.Net使用它

 public class Dog { public string Name; [JsonConstructor] public Dog() { } public Dog(string name) { Name = name + "aaa"; } } 

有这样的事情

 JsonConvert.DeserializeObject("json string", typeof(some object));