自定义DefaultValue取决于使用Newtonsoft的PC

时间:2018-08-10 07:57:43

标签: c# json.net default-value

我有一个JSON配置值,该值根据处理器数量,内存大小,操作系统等而有所不同。

该值本身可以在运行时轻松计算,因此我不希望我的用户在自己的配置中为其添加条目。
但是在某些情况下,用户可能会有自己的价值(用于测试或加载等)。

我可以设置一个默认值,但是对于所有机器,“默认”值都不相同:

...

[DefaultValue(8)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public int EventsPerProcessor { get; protected set; }

...

有没有办法知道该值是否丢失,以便我可以计算出正确的“默认”值?

还是[DefaultValue(MyCustomFunction(...) )]之类的东西?

NB:当然,我可以将默认值设置为0,甚至是-ve,但是我宁愿不要假定用户是否输入了该值。

1 个答案:

答案 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