使用JSON.Net为Color设置DefaultValue

时间:2016-03-24 21:52:34

标签: c# json json.net

使用以下测试类

public class Test {
    [DefaultValue("Black")] 
    public Color ForeColor = Color.Black;
}

以下序列化代码:

var test = new Test();
var json = JsonConvert.SerializeObject(test, Newtonsoft.Json.Formatting.None,
    new JsonSerializerSettings {
        NullValueHandling = NullValueHandling.Ignore,
        DefaultValueHandling = DefaultValueHandling.Ignore
});

我得到了

{"ForeColor":"Black"}

如果Color属性与指定的默认值相同,是否有(简单)方法可以将Color属性序列化。

1 个答案:

答案 0 :(得分:3)

DefaultValueAttribute中存储的默认值特定于其类型。因此,如果指定默认值"Black",则默认值为实际字符串,即使属性类型的类型不同。

为了使用其他非简单类型,您必须使用属性的a special overload并指定对象类型和可以使用已知类型转换器转换为目标类型的字符串值。 / p>

幸运的是,Color struct确实注册了类型转换器。所以你可以像这样使用它:

public class Test
{
    [DefaultValue(typeof(Color), "Black")]
    public Color ForeColor = Color.Black;
}

然后它按预期工作:

var test = new Test();
var json = JsonConvert.SerializeObject(test, new JsonSerializerSettings {
    DefaultValueHandling = DefaultValueHandling.Ignore
});
Console.WriteLine(json); // {}