2

インターフェイスを明示的に実装する単純な型があります。

public interface IMessageHeader
{
    string FromAddress { get; set; }
    string ToAddress   { get; set; }
}

[Serializable]
public class MessageHeader:IMessageHeader
{
  private string from;
  private string to;

  [XmlAttribute("From")]
  string IMessageHeade.FromAddress
  {
    get { return this.from;}
    set { this.from = value;}
  }

 [XmlAttribute("To")]
 string IMessageHeade.ToAddress
 {
    get { return this.to;}
    set { this.to = value;}
 }
}

タイプIMessageHeaderのオブジェクトをシリアライズおよびデシリアライズする方法はありますか??

試してみると、次のエラーが発生しました

「インターフェイス IMessageHeader をシリアル化できません」

4

5 に答える 5

3

Activator.CreateInstance(typeof(IMessageHeader)) を実行できないため、IMessageHeader をシリアル化することはできません。これは、シリアル化が内部で行うことです。具体的な型が必要です。

typeof(MessageHeader) を実行することも、MessageHeader のインスタンスを持って実行することもできます。

XmlSerializer serializer = new XmlSerializer(instance.GetType())
于 2008-09-12T21:51:58.543 に答える
0

いいえ、シリアライザーにはインスタンス化できる具象クラスが必要なためです。

次のコードがあるとします。

XmlSerializer ser = new XmlSerializer(typeof(IMessageHeader));

IMessageHeader header = (IMessageHeader)ser.Deserialize(data);

Deserialize() から返すためにシリアライザーが作成するクラスは何ですか?

理論的には、インターフェイスをシリアル化/逆シリアル化することは可能ですが、XmlSerializer を使用することはできません。

于 2008-09-12T21:20:33.410 に答える
0

IMessageHeader 宣言に IXmlSerializable を追加してみてください。うまくいくとは思いませんが。

私の記憶では、.net xml シリアライザーは、既定のコンストラクターを持つ具象クラスに対してのみ機能します。

于 2008-09-12T21:21:39.350 に答える
0

この問題は、インターフェイスを逆シリアル化することはできませんが、具象クラスをインスタンス化する必要があるという事実に起因しています。

XmlInclude 属性を使用して、インターフェイスを実装する具体的なクラスをシリアライザーに伝えることができます。

于 2008-09-12T21:26:19.557 に答える
-1

IMessageHeader を実装し、MarshalByRefObject も継承する抽象基本クラスを作成できます。

于 2008-09-12T21:20:26.467 に答える