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

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,因为您无法执行 Activator.CreateInstance(typeof(IMessageHeader)) 这就是序列化将在幕后执行的操作。你需要一个具体的类型。

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

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

其他提示

不,因为序列化器需要一个可以实例化的具体类。

给出以下代码:

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

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

序列化器创建什么类来从 Deserialize() 返回?

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

尝试将 IXmlSerialized 添加到您的 IMessageHeader 声明中,尽管我认为这不会起作用。

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

该问题源于以下事实:您无法反序列化接口,但需要实例化具体类。

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

您可以创建一个实现 IMessageHeader 并继承 MarshalByRefObject 的抽象基类

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top