1

つまり、データを一方向に送りたいのですが、クラスにフィードしますが、シリアル化操作中にデータが保存されないようにします。それについて行く最善の方法は何ですか?

4

3 に答える 3

2

Set最も簡単な方法は、正しく機能するが常に固定の偽の値を返すプロパティをシリアライズすることGetです。たとえば、プロパティが と呼ばれる場合、元のプロパティをシリアル化せずに、上記の設計に適合するプロパティをPassword作成します。SerializablePassword

編集

Ani のサンプルをフォーマットして、1 つの変更を加えたものを次に示します。

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

[XmlElement("Password")]
public string SerializablePassword
{
  get { return null; }
  set { Password = value; }
}
于 2010-08-09T20:46:25.507 に答える
1

シリアル化プロセスを完全に制御したい場合は、インターフェイスISerializableを実装できます。

特別なコンストラクターも実装します。

編集:私はIXmlSerializableを意味しました。ありがとうジョン。

于 2010-08-09T20:39:29.357 に答える
0

わかりました、提案を試みましたreturn null;が、うまくいきません。逆シリアル化に失敗します。ただし、次の回避策があります。

public List<Program> Programs
{
    get
    {
        System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(true);
        for (int i = 0; i < stackTrace.FrameCount; i++)
        {
            if ("XmlSerializationWriterApplication".Equals(stackTrace.GetFrame(i).GetMethod().ReflectedType.Name))
            {
                return null;
            }
        }
        return programs;
    }
    set { programs = value; }
}

おそらくパフォーマンスはあまり高くありませんが、これは StackTrace を調べて、誰がget- を呼び出したかを調べます。それがシリアライザー/ライターである場合は、何も返しません。

于 2010-08-10T13:18:22.093 に答える