Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JSON.Net为颜色设置DefaultValue_C#_Json_Json.net - Fatal编程技术网

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”)]