使用XML序列化序列化类时,如何有条件地输出某些属性。即在某些情况下,它输出此属性,在其他情况下,它不输出。
答案 0 :(得分:13)
您可以创建一个名为MyPropertySpecified
的附加属性,该属性返回一个布尔值
当此属性返回true时,将MyProperty
属性序列化。当它返回false时,它不会被序列化。
此外,您还希望使用XmlIgnoreAttribute
修饰该属性,以便不会序列化此特定属性。
示例:
public class Person
{
public string Name
{
get;
set;
}
[XmlIgnore]
public bool NameSpecified
{
get { return Name != "secret"; }
}
}
答案 1 :(得分:4)
虽然有效并且是一个相当简短的解决方案,但propertyNameSpecified
模式在我看来有一些缺点(污染类的接口;依赖于属性名称;引入隐式行为)。
如果您只需要实现一个简单的条件(例如,不要序列化默认值),那么DefaultValue
属性是更好的选择。
例如:
public class PurchaseOrder
{
[DefaultValue("2002")]
public string Year;
}
如果Year的值为“2002”,则将从XML输出中省略它。
答案 2 :(得分:0)
您可以在序列化时使用 OnSerializingAttribute ,这允许我们在序列化之前调用方法。您可以获得有关它的更多信息here
答案 3 :(得分:0)