C# 使用JSON.Net为颜色设置DefaultValue
使用以下测试类C# 使用JSON.Net为颜色设置DefaultValue,c#,json,json.net,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 {
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"}
如果颜色属性与指定的默认值相同,是否有(简单)方法使其不序列化。存储在中的默认值特定于其类型。因此,如果将默认值指定为
“Black”
,则默认值是实际字符串,即使属性类型不同
为了处理其他非简单类型,必须使用属性并指定对象类型和字符串值,该值可以使用已知类型转换器转换为目标类型
幸运的是,没有注册类型转换器。所以你可以这样使用它:
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); // {}
我运行了这个精确的代码,并得到了{“ForeColor”:“0,0,0,255”}作为输出,有什么想法可能是错误的吗?编辑:哦,我使用的是XNA颜色类而不是系统。绘图。@JavidPack现在对你有用吗?或者你是在问如何使用XNA颜色?是的,对不起,我知道了。TypeConverter与XNA颜色不同,它只接受一个由4个逗号分隔的数字组成的字符串:这就是我最后得到的:[DefaultValue(typeof(Color),“165,42,42255”)]