我的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]
的参数。它确实成功反序列化,但在反序列化的类中丢失了名称和值。
你能帮我解决一下,如何序列化这样的类实例?
答案 0 :(得分:1)
问题是您的Example
类没有默认构造函数。当不在类定义中定义构造函数时,编译器将隐式地为您提供一个构造函数
(see this answer);但是,如果执行定义了重载的构造函数(就像你一样),编译器将不再为你提供默认的构造函数。
为了反序列化和实例化一个类(通过反射完成),你的类必须有一个默认的构造函数。 See this question。
下面的代码现在应该按预期工作:
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;
}