我的C#
类具有以下结构
public class Example
{
public static Example Instance1 = new Example (0, "A");
public static Example Instance2 = new Example (1, "B");
protected Example(int value, string name)
{
this.value = value;
this.name = name;
}
private int value;
private string name;
}
现在我正在尝试按如下方式序列化Example.Instance1
var serializedVariable = JsonConvert.SerializeObject(Example.Instance1);
var OriginalVariable = JsonConvert.DeserializeObject<Example>(serializedVariable);
但它会引发异常,即它没有为 JSON 指定的构造函数,但值和名称在反序列化版本中丢失。
现在,我为构造函数添加了一个名为 [JsonConstructor]
的参数。它确实成功反序列化,但反序列化类中的名称和值丢失。
你能帮我一下,如何序列化这样的类实例吗?
问题是您的Example
类没有默认构造函数。当您没有在类定义中定义构造函数时,编译器将隐式
为您提供一个(见这个答案);但是,如果确实定义了重载的构造函数(就像您所做的那样),编译器将不再为您提供默认构造函数。
为了反序列化和实例化类的实例(这都是通过反射完成的),你的类必须有一个默认的构造函数。看到这个问题。
下面的代码现在应该按预期工作:
public class Example
{
public static Example Instance1 = new Example (0, "A");
public static Example Instance2 = new Example (1, "B");
//Must have this default constructor!
protected Example()
{//... Add code if needed
}
protected Example(int value, string name)
{
this.value = value;
this.name = name;
}
private int value;
private string name;
}