2012-02-24 98 views
8

我应该如何标记属性,他们不应该序列化,如果他们有默认值?例如,如果我有布尔值,它应该被序列化,如果只设置为true,与可为空值相同,如果它们为空,我不想将它们包含在我的序列化文件中。如何避免序列化默认值?

+0

这是什么目的! – 2012-02-24 11:04:57

+0

有较小的序列化文件因为我需要发送它有时thrue gprs网络我需要为交通支付,无论如何在恢复(反序列化)期间,如果它们不存在,它们将被设置为默认值,所以如何避免序列化它们? – kosnkov 2012-02-24 11:07:06

+0

我认为你要么编写自己的序列化程序,要么用自己的规则后处理内置序列化程序的结果。 – 2012-02-24 11:08:39

回答

22

好吧,我自己找到了。它是[DefaultValue(false)]。如果我用这个属性标记一些属性,那么只有当它和()中的值不同时才会被序列化。

System.ComponentModel.DefaultValueAttribute

+0

感谢您的解决方案!任何想法如何避免,我必须把默认值两次? '[DefaultValue(“Status”)] public string statusTag =“Status”;' – pfuhlert 2017-10-25 13:39:36

4

有指定的属性这样的东西。我找不到msdn文档,但this article应该会有所帮助。 基本上你必须这样写:

//this property would not be serialized if it contains String.Empty value 
public string PropertyName { get; set; } 


[XmlIgnore] 
public bool PropertyNameSpecified 
{ 
    get { return PropertyName != String.Empty; } 
} 
+0

get {return PropertyName!= String.Empty; } 那是什么?你将bool与字符串进行比较,当我添加xmlIgnore时,它永远不会出现在序列化文件中,即使这个属性不为空或者在bool的情况下为true。 – kosnkov 2012-02-24 12:34:28

+0

我编辑了我的答案。希望这给你正确的理解那里发生的事情。 – 2012-02-24 13:18:03