繁体   English   中英

如何在某些条件下序列化某些属性

[英]how to serialize some attribute in some condition

使用XML序列化序列化类时,如何有条件地输出某些属性。 即在某些情况下,它输出此属性,在其他情况下,它不输出。

您可以创建一个名为MyPropertySpecified的附加属性,该属性返回一个布尔值。
当此属性返回true时,将序列化MyProperty属性。 当它返回false时,它不会被序列化。

此外,您还希望使用XmlIgnoreAttribute修饰该属性,以便不对此特定属性进行序列化。

例:

public class Person
{
    public string Name
    {
        get;
        set;
    }

    [XmlIgnore]
    public bool NameSpecified
    {
        get  { return Name != "secret"; }
    }
}

虽然有效并且是一个相当简短的解决方案,但我认为propertyNameSpecified模式有一些缺点(污染类的接口;依赖于属性名称;引入隐式行为)。

如果您只需要实现一个简单的条件(例如,不要序列化默认值),那么DefaultValue属性是更好的选择。

例如:

public class PurchaseOrder
{
    [DefaultValue("2002")]
    public string Year;
}

如果Year具有值“2002”,则将从XML输出中省略它。

您可以在序列化时使用OnSerializingAttribute ,这允许我们在序列化之前调用方法。 您可以在此处获取有关它的更多信息

Imho你需要在类上实现IXmlSerializable并实现WriteXml和ReadXml方法,这样它们只能根据你指定的条件写入属性,并且可以在反序列化时处理带有或不带有特定属性的读取。

Msdn的IXmlSerializable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM