我正在使用 JSON 作为配置文件,并且我想要一个数组的默认值。我想让序列化的 JSON 忽略数组,如果它等于,DefaultValueAttribute这样如果我决定在程序的第二个版本中更改 DefaultValues,新的默认值将被加载,而不是原始默认值的未触及副本。
我的问题是,如果数组引用没有改变,代码就可以工作,但是程序中的其他代码正在改变数组但保留其中的值。(该程序维护该类的许多克隆,因此无法避免)。
这是使用 c# 交互式显示的问题:
using System.ComponentModel;
using Newtonsoft.Json;
class A
{
[DefaultValue(new int[] { 4, 6, 12 })]
public int[] SomeArray;
}
var serializerSettings = new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,
};
var a = new A();
JsonConvert.PopulateObject("{}", a, serializerSettings);
Console.WriteLine(JsonConvert.SerializeObject(a, serializerSettings));
// Prints {}
a.SomeArray = new int[] { 4, 6, 12 };
Console.WriteLine(JsonConvert.SerializeObject(a, serializerSettings));
// Prints {"SomeArray":[4,6,12]}
如您所见,第一个 SerializeObject 有效,但如果数组内容相同但不是相同的数组引用,它会将默认值写入 json,我想避免这种情况。
在这种情况下,有什么办法可以让 Json.net 忽略数组吗?
慕的地6264312
相关分类