我有以下类:JsonSerializer.CreateDefault()填充(..)重置我的价值观
public class MainClass
{
public static MainClass[] array = new MainClass[1]
{
new MainClass
{
subClass = new SubClass[2]
{
new SubClass
{
variable1 = "my value"
},
new SubClass
{
variable1 = "my value"
}
}
}
};
public SubClass[] subClass;
[DataContract]
public class SubClass
{
public string variable1 = "default value";
[DataMember] // because only variable2 should be saved in json
public string variable2 = "default value";
}
}
我保存如下:
File.WriteAllText("data.txt", JsonConvert.SerializeObject(new
{
MainClass.array
}, new JsonSerializerSettings { Formatting = Formatting.Indented }));
的data.txt:
{
"array": [
{
"subClass": [
{
"variable2": "value from json"
},
{
"variable2": "value from json"
}
]
}
]
}
然后我反序列化并填充我的对象,如下所示:
JObject json = JObject.Parse(File.ReadAllText("data.txt"));
if (json["array"] != null)
{
for (int i = 0, len = json["array"].Count(); i < len; i++)
{
using (var sr = json["array"][i].CreateReader())
{
JsonSerializer.CreateDefault().Populate(sr, MainClass.array[i]);
}
}
}
然而,当我打印以下变量:
Console.WriteLine(MainClass.array[0].subClass[0].variable1);
Console.WriteLine(MainClass.array[0].subClass[0].variable2);
Console.WriteLine(MainClass.array[0].subClass[1].variable1);
Console.WriteLine(MainClass.array[0].subClass[1].variable2);
那么它的输出是:
default value
value from json
default value
value from json
但
而不是“默认值”应该有“我的价值”,因为那是什么我在创建类的实例时使用了JsonSerializer,应该只使用来自json的值填充对象。如何正确填充整个对象,而不重置其未包含在json中的属性?
感谢您的解释。我担心Populate()将无法合并当前和现有的数组,但其名称和文档混淆了我。最后,我通过添加或分配每个数组成员的属性与来自json的值来做到这一点。你的函数可能不太容易在我的真实代码中工作,因为我有一个具有各种属性和其他数组的类的数组。 – LukAss741