此外,如果它面对构造函数,它会用json字符串填充参数(就像参数名称在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"}");
则创建的对象给我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));