自定义默认值取决于使用 Newtonsoft 的 PC
Custom DefaultValue depending on the PC using Newtonsoft
我有一个 JSON 配置值,它可能会因处理器数量、内存大小、OS 等因素而有所不同。
这个值本身可以在运行时很容易地计算出来,所以我不希望我的用户在他们自己的配置中有一个条目。
但在某些边缘情况下,用户可以有自己的价值,(用于测试或负载等)。
我可以设置一个默认值,但是 'default' 对所有机器都不一样:
...
[DefaultValue(8)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public int EventsPerProcessor { get; protected set; }
...
有没有办法知道该值是否丢失,以便我可以计算出正确的 'default' 值?
或者类似 [DefaultValue(MyCustomFunction(...) )]
?
注意:当然,我可以将我的默认值设置为 0
,(甚至 -ve),但我宁愿不假设用户是否输入了该值。
因为 DefaultValueHandling.Populate
的唯一效果是
Members with a default value but no JSON will be set to their default value when deserializing.
您可以完全删除 [DefaultValue(...)]
和 DefaultValueHandling
,而是在 class 构造函数中初始化 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
已受保护setter,因此仍然需要申请[JsonProperty]
。
示例 fiddle here.
我有一个 JSON 配置值,它可能会因处理器数量、内存大小、OS 等因素而有所不同。
这个值本身可以在运行时很容易地计算出来,所以我不希望我的用户在他们自己的配置中有一个条目。
但在某些边缘情况下,用户可以有自己的价值,(用于测试或负载等)。
我可以设置一个默认值,但是 'default' 对所有机器都不一样:
...
[DefaultValue(8)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public int EventsPerProcessor { get; protected set; }
...
有没有办法知道该值是否丢失,以便我可以计算出正确的 'default' 值?
或者类似 [DefaultValue(MyCustomFunction(...) )]
?
注意:当然,我可以将我的默认值设置为 0
,(甚至 -ve),但我宁愿不假设用户是否输入了该值。
因为 DefaultValueHandling.Populate
的唯一效果是
Members with a default value but no JSON will be set to their default value when deserializing.
您可以完全删除 [DefaultValue(...)]
和 DefaultValueHandling
,而是在 class 构造函数中初始化 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
已受保护setter,因此仍然需要申请[JsonProperty]
。
示例 fiddle here.