2011-01-19 5 views
4

私は約20人のメンバーを持つクラスを持っています。このクラスのオブジェクトをXMLで直列化する必要があります。しかし、条件は私はXMLの1つのメンバーが必要です。クラスのプロパティを1つだけシリアル化します

どうすればいいですか?

EDIT:しかし、しばらくして、すべてのメンバーをシリアル化したいと思います。だから私は[XMLIgnore]属性を使うことはできません。

答えて

1

あなたは直列化したくないすべてのメンバーに[XmlIgnore]属性を入れることができます。

2

[XmlIgnore()] 
public Type X 
{ 
get;set; 
} 
+0

編集を参照してください –

0

を作るには、2つの方法があり、他の属性

<NonSerializable()> _ 
Property someproperty 

エンドプロパティ

1

をマークし、あなたがシリアライズしたくないすべてのメンバーの次の属性を追加します。属性を使用して.NETで非直列化可能なプロパティ。

あなたがバイナリまたはSOAPにシリアライズ場合は、ちょうどあなたが[XmlIgnore]を使用する必要がありますXMLにシリアライズしたい場合は、[NonSerialized]を使用する必要があり、属性[NonSerialized]または[XmlIgnore]

を設定することができます。

だからあなたの場合には答えが[XmlIgnore]

EDITです: 動的プロパティに属性を適用する方法はありません。 ここでは、ここでそのことについていくつかの情報:ここCan attributes be added dynamically in C#?Remove C# attribute of a property dynamically

はまた、ワークアウトとして、あなたは異なる属性を使用して、クラスの異なるコピーを有することができます。

OR

は、この方法は、他のすべてのものは空/ nullになりますと、そのクラスの直列化した後、あなたが必要なXMLを取得する必要があり、シリアライズ可能なように、すべての小道具を設定し、あなたのクラスのコピーを持っていますが、必要なプロパティのみを移入します。

2

あなたが明示的に、いくつかの外部パラメータに基づいて、SerializationParameter.FullSerializationは、あなたがたときにシリアル化されるかを制御できる方法の一例である、すなわち

class CustomXml: IXmlSerializable 
{ 
    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     // 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     if (SerializationParameter.FullSerialization) 
      //deserialize everything 
     else 
      //deserialize one field only 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     if (SerializationParameter.FullSerialization) 
      //serialize everything 
     else 
      //serialize one field only 
    } 
} 

を自分でIXmlSerializableインタフェースを実装し、フィールドの読み取り/書き込みを制御でき。

関連する問題