C# 我可以用Newtonsoft.Json进行严格的反序列化吗?
我正在使用Newtonsoft.Json对对象进行序列化/反序列化。C# 我可以用Newtonsoft.Json进行严格的反序列化吗?,c#,json,json.net,json-deserialization,C#,Json,Json.net,Json Deserialization,我正在使用Newtonsoft.Json对对象进行序列化/反序列化。 据我所知,如果类没有无参数构造函数,反序列化就不可能成功。例如 public class Dog { public string Name; public Dog(string n) { Name = n; } } 对于下面的此类,代码将正确生成对象 Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog
据我所知,如果类没有无参数构造函数,反序列化就不可能成功。例如
public class Dog
{
public string Name;
public Dog(string n)
{
Name = n;
}
}
对于下面的此类,代码将正确生成对象
Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{\"Name\":\"Dog1\"}");
以及生成具有
Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{\"Name\":\"Dog1\"}");
dogDog1=Newtonsoft.Json.JsonConvert.DeserializeObject(“{”Name\“:\“dog1\”);
然后,创建的对象将为我提供dog1.Name=“Dog1aaa”
,而不是dog1.Name=“dog1”
。如何正确反序列化对象(可能在创建对象后覆盖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));
即使我将JsonConstructor的修饰符更改为private,它也可以正常工作。Newtonsoft仍然以某种方式使用此对象创建对象。我猜您的意思是
某个类
,而不是某个对象
?
public class Dog
{
public string Name;
[JsonConstructor]
public Dog()
{
}
public Dog(string name)
{
Name = name + "aaa";
}
}
JsonConvert.DeserializeObject("json string", typeof(some object));