如何使用 JSONCONVERT 序列化类的静态变量,该变量由 C# 中类本身的实例初始化



我的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;
}

相关内容

  • 没有找到相关文章

最新更新