如何在某些情况下序列化某些属性
答
你可以创建一个名为MyPropertySpecified
的附加属性,它返回一个布尔值。
当此属性返回true时,MyProperty
属性将被序列化。当它返回false时,它不会被序列化。
此外,你想装饰该属性与XmlIgnoreAttribute
,以便这个特定的属性不序列化。
例子:
public class Person
{
public string Name
{
get;
set;
}
[XmlIgnore]
public bool NameSpecified
{
get { return Name != "secret"; }
}
}
答
恕我直言,你需要实现的类IXmlSerializable的和实施这样一种方式,他们只写根据条件您指定的属性,并能处理阅读中WriteXML和的ReadXml方法有或没有特定属性出现在反序列化中。
答
虽然作品,是一个相当短的解决方案,propertyNameSpecified
模式在我看来,有一些缺点(污染类的接口;依靠属性名称;介绍了隐行为)。
如果您只需要实现一个简单条件(例如,不要序列化默认值),那么DefaultValue
属性是一个更好的选择。
例如:
public class PurchaseOrder
{
[DefaultValue("2002")]
public string Year;
}
如果年的值是 “2002”,它将从XML输出被省略。
我想你误解了这个问题。 OP想要输出属性(包含在xml中)。 – 2010-12-08 10:29:29