c# – 我可以使用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转换器在进行反射时忽略了区分大小写.
>此外,如果它面向构造函数,则使用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";
    }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...