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

c# – 我可以使用Newtonsoft.Json进行严格的反序列化吗?,第1张

概述我正在使用Newtonsoft.Json来序列化/反序列化对象. 据我所知,如果类没有无参数构造函数,则反序列化无法成功.例, public class Dog{ public string Name; public Dog(string n) { Name = n; }} 对于下面这个类,代码正确生成对象. Dog dog1 = Newton 我正在使用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转换器在进行反射时忽略了区分大小写.
>此外,如果它面向构造函数,则使用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进行严格的反序列化吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243464.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存