Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以用Newtonsoft.Json进行严格的反序列化吗?_C#_Json_Json.net_Json Deserialization - Fatal编程技术网

C# 我可以用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

我正在使用Newtonsoft.Json对对象进行序列化/反序列化。
据我所知,如果类没有无参数构造函数,反序列化就不可能成功。例如

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));