我正在使用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\"}");
现在我能想到的只是
我的问题出现了:
如果我的课程是这样的,
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
)?有没有办法严格反序列化?
提前致谢
答案 0 :(得分:7)
如何正确反序列化对象(可能在创建对象后覆盖Name)?有没有办法严格反序列化?
您可以声明另一个构造函数并强制Json.Net使用它
public class Dog
{
public string Name;
[JsonConstructor]
public Dog()
{
}
public Dog(string name)
{
Name = name + "aaa";
}
}
答案 1 :(得分:-1)
有这样的东西
JsonConvert.DeserializeObject("json string", typeof(some object));