Xml序列化动态忽略

Tre*_*Dev 6 c# xml xml-serialization ixmlserializable

我正在尝试以特定格式生成xml文档.我想跳过根据属性的值序列化属性.

public class Parent
{
    public Parent()
    {
        myChild = new Child();
        myChild2 = new Child() { Value = "Value" };
    }
    public Child myChild { get; set; }
    public Child myChild2 { get; set; }
}

public class Child
{
    private bool _set;
    public bool Set { get { return _set; } }

    private string _value = "default";
    [System.Xml.Serialization.XmlText()]
    public string Value
    {
        get { return _value; }
        set { _value = value; _set = true; }
    }
}

System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(Parent));
x.Serialize(Console.Out, new Parent());
Run Code Online (Sandbox Code Playgroud)

如果Set为false,我希望整个属性不被序列化,我得到的xml应该是

<Parent>
   <myChild2>default</myChild2>
</Parent>
Run Code Online (Sandbox Code Playgroud)

代替

<Parent>
   <myChild/>
   <myChild2>default</myChild2>
</Parent>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以用IXmlSerializable或其他任何东西干净利落地做到这一点?

谢谢!

Mar*_*ell 6

有一个ShouldSerialize*模式(由TypeDescriptor引入,但由其他一些代码区域识别,例如XmlSerializer):

public bool ShouldSerializemyChild() {
     return myChild != null && myChild.Set;
}
Run Code Online (Sandbox Code Playgroud)

那应该排序.

但是,更简单的选择是将其赋值为null.