我可以用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"}");
    

    则创建的对象给我CCD_ 1而不是CCD_。如何正确地反序列化对象(可能在创建对象后重写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));
    

    相关内容

    • 没有找到相关文章

    最新更新