c# – 我可以使用Newtonsoft.Json进行严格的反序列化吗?
发布时间:2020-12-15 07:44:23 所属栏目:百科 来源:网络整理
导读:我正在使用Newtonsoft.Json来序列化/反序列化对象. 据我所知,如果类没有无参数构造函数,则反序列化无法成功.例, public class Dog{ public string Name; public Dog(string n) { Name = n; }} 对于下面这个类,代码正确生成对象. Dog dog1 = Newtonsoft.Json.
我正在使用Newtonsoft.Json来序列化/反序列化对象.
据我所知,如果类没有无参数构造函数,则反序列化无法成功.例, public class Dog { public string Name; public Dog(string n) { Name = n; } } 对于下面这个类,代码正确生成对象. Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"Name":"Dog1"}"); 对我来说,令人惊讶的是,它也可以使用以下代码正确生成对象. Dog dog2 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"name":"Dog2"}"); Dog dog3 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"n":"Dog3"}"); Dog dog4 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"N":"Dog4"}"); 现在我能想到的就是 > Json转换器在进行反射时忽略了区分大小写. 这是我的问题: 如果我的班级是这样的, public class Dog { public string Name; public Dog(string name) { Name = name + "aaa"; } } 和生成对象 Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"Name":"Dog1"}"); 然后创建对象给我dog1.Name =“Dog1aaa”而不是dog1.Name =“Dog1”.如何正确反序列化对象(可能在创建对象后覆盖Name)?有没有办法严格反序列化? 提前致谢 解决方法
您可以声明另一个构造函数并强制Json.Net使用它 public class Dog { public string Name; [JsonConstructor] public Dog() { } public Dog(string name) { Name = name + "aaa"; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |