C# C语言中的xml序列化#

C# C语言中的xml序列化#,c#,.net,serialization,interface,C#,.net,Serialization,Interface,我有一个显式实现接口的简单类型 public interface IMessageHeader { string FromAddress { get; set; } string ToAddress { get; set; } } [Serializable] public class MessageHeader:IMessageHeader { private string from; private string to; [XmlAttribute("Fr

我有一个显式实现接口的简单类型

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”

您可以创建一个抽象基类来实现IMessageHeader,还可以继承MarshalByRefObject

否,因为序列化程序需要一个可以实例化的具体类

给定以下代码:

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

IMessageHeader header = (IMessageHeader)ser.Deserialize(data);
序列化程序创建什么类从反序列化()返回


理论上,可以序列化/反序列化接口,但不能使用XmlSerializer。

尝试将IXmlSerializable添加到IMessageHeader声明中,尽管我认为这不起作用


据我回忆,.net xml序列化程序仅适用于具有默认构造函数的具体类。

问题源于这样一个事实,即您不能反序列化接口,但需要实例化具体类


XmlInclude属性可用于告诉序列化程序哪些具体类实现了接口。

您无法序列化IMessageHeader,因为您无法执行Activator.CreateInstance(typeof(IMessageHeader)),这是序列化将在封面下执行的操作。你需要一个具体的类型

您可以执行typeof(MessageHeader),或者您可以说,拥有MessageHeader的实例并执行

XmlSerializer serializer = new XmlSerializer(instance.GetType())