
据我所知,如果类没有无参数构造函数,则反序列化无法成功.例,
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转换器在进行反射时忽略了区分大小写.
>此外,如果它面向构造函数,则使用Json字符串填充参数(就好像参数名称在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)?有没有办法严格反序列化?
提前致谢
解决方法How can I deserialize the object correctly(maybe overrIDing name after creating the object)? Is there a way for strict deserialization?
您可以声明另一个构造函数并强制Json.Net使用它
public class Dog{ public string name; [JsonConstructor] public Dog() { } public Dog(string name) { name = name + "aaa"; }} 总结 以上是内存溢出为你收集整理的c# – 我可以使用Newtonsoft.Json进行严格的反序列化吗?全部内容,希望文章能够帮你解决c# – 我可以使用Newtonsoft.Json进行严格的反序列化吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)