2017-10-09 26 views
0

私は、このようにC#のXML(デ)シリアル化メカニズムをカスタマイズする方法を必要とする:IXmlSerializableインターフェースメソッドの条件付き使用

[Serializable] 
public class MyElement : IXmlSerializable 
{ 
    [XmlAttribute] 
    public string PropertyX { get; set; } 

    [XmlElement] 
    public MySubElement SubElement { get; set; } 

    // .... other properties and elements... 

    [XmlIgnore] 
    public string ElementXml { get;set; } 


    public XmlSchema GetSchema() { return null; } 

    public void ReadXml(XmlReader reader) 
    { 
     // use default deserialization mechanism, like IXmlSerializable isn't implemented 
    } 

    public void WriteXml(XmlWriter writer) 
    { 
     if (!string.IsNullOrEmpty(ElementXml)) { 
      // serialize as ElementXml value 
     } 
     else 
     { 
      // serialize using default serialization mechanism, like IXmlSerializable isn't implemented 
     } 
    } 
} 

インスタンスMySubElementものように振る舞うべきであるため、私は、複数の要素にこのパラダイムを使用する必要がこの。オブジェクトモデルは複雑なので、属性または要素ごとにこの属性を実装することは私の選択肢ではありません。 これはできますか?

+0

何らかの点でこれを何とかしなければならない、これも参照してくださいhttps://stackoverflow.com/questions/1495716/net-xmlignore-by-default – Aybe

+0

「ElementXml」が設定されている場合、他のメンバー'PropertyX'はデフォルト(ヌル)値を持っていますか? – dbc

+0

@dbcもし問題が解決するなら、それらにデフォルト値を持たせることができます。 – Filip

答えて

0

System.ComponentModel.DefaultValue属性の使用を検討してください。

public class MyElement 
{ 
    [XmlAttribute] 
    public string PropertyX { get; set; } 

    [XmlElement] 
    public MySubElement SubElement { get; set; } 

    [DefaultValue("")] 
    public string ElementXml { get; set; } 
} 

ElementXmlstring.Emptyであれば、それはシリアライズされません。

おそらく、このようなコードを使用する必要があります。

private string _elementXml; 

[DefaultValue("")] 
public string ElementXml 
{ 
    get => _elementXml; 
    set => _elementXml = string.IsNullOrWhiteSpace(value) ? null : value; 
} 

をこの場合は、nullまたは空でなく、空白文字の任意の文字列だけでなく、シリアル化されることはありません。

+0

これは私の問題のどの部分を解決するのですか? ElementXmlのシリアライゼーションをスキップすることは問題ではない、私はShouldSerializeメソッドでもそれを行うことができる。私は、コメントのあるコード部分の解決策が必要です。 – Filip

+0

@Filip - 'IXmlSerializable'実装なしでデフォルトのシリアル化メカニズムを使用します。 –

関連する問題