我有一个JSON配置值,该值根据处理器数量,内存大小,操作系统等而有所不同。
该值本身可以在运行时轻松计算,因此我不希望我的用户在自己的配置中为其添加条目。
但是在某些情况下,用户可能会有自己的价值(用于测试或加载等)。
我可以设置一个默认值,但是对于所有机器,“默认”值都不相同:
...
[DefaultValue(8)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public int EventsPerProcessor { get; protected set; }
...
有没有办法知道该值是否丢失,以便我可以计算出正确的“默认”值?
还是[DefaultValue(MyCustomFunction(...) )]
之类的东西?
NB:当然,我可以将默认值设置为0
,甚至是-ve,但是我宁愿不要假定用户是否输入了该值。
答案 0 :(得分:1)
由于DefaultValueHandling.Populate
的唯一作用是
具有默认值但没有JSON的成员在反序列化时将设置为其默认值。
您可以完全删除[DefaultValue(...)]
和DefaultValueHandling
,而可以在类构造函数中初始化EventsPerProcessor
:
public class RootObject
{
static int CalculateDefaultEventsPerProcessor()
{
// Replace with calculated value
return 12;
}
public RootObject()
{
EventsPerProcessor = CalculateDefaultEventsPerProcessor();
}
[JsonProperty]
public int EventsPerProcessor { get; protected set; }
}
如果JSON中没有"EventsPerProcessor"
,则在构造函数中计算出的值将保持不变。
请注意,由于EventsPerProcessor
具有受保护的设置器,因此仍然有必要应用[JsonProperty]
。
提琴here。