使用变量列表序列化 class 不会在反序列化期间恢复它,但适用于单个变量

Serializing a class with a list of variable does not restore it during deserialization but works for a single variable

我正在使用 Newtonsoft.Json 序列化 class 并将其反序列化以实现 save/load 功能。但是,我在为使用单个变量时不会出现的变量列表执行此操作时遇到了一些问题。我在下面展示了一个最低限度的工作示例:

Class待保存:

public class C1
{
    public int a;

    public C1()
    {
        a = 123;
    }
}

public class RootClass
{
    public C1 single = new C1();
    public List<C1> list = new List<C1>() { new C1() };
}

序列化和反序列化:

    RootClass rc = new RootClass();
    rc.single.a = 789;
    rc.list[0].a = 789;

    Console.WriteLine(rc.single.a);
    Console.WriteLine(rc.list[0].a);

    string ToJason = JsonConvert.SerializeObject(rc);

    Console.WriteLine("-------");

    rc = JsonConvert.DeserializeObject<RootClass>(ToJason);

    Console.WriteLine(rc.single.a);
    Console.WriteLine(rc.list[0].a);

打印结果为:

789
789
-------
789
123

这不是我要找的。我希望 rc.list[0].a789 而不是 123,与正确保存的其他变量相同。

编辑 1:

这是序列化的结果(JSON字符串)

{
  "single": {
    "a": 789
  },
  "list": [
    {
      "a": 789
    }
  ]
}

问题出在反序列化上。

在构造函数中填充列表不是最好的主意,但你可以这样锻炼

    var pd=JObject.Parse(ToJason);
    rc = pd.ToObject<RootClass>();
    rc.list=pd["list"].ToObject<List<C1>>();