反序列化来自不同程序集的匹配类型

时间:2014-10-14 19:39:45

标签: c# serialization xml-serialization assemblies

如果我在命名空间AssemblyA下的AssemblyA.Entities中定义了类/接口对:

public IEntity
{
    string Name { get; set; }
}

[Serializable]
public Entity : IEntity
{
    public string Name { get; set; }
}

我使用XmlSerializer将其序列化为XML:

var myEntities = new List<IEntity>();
// myEntities is populated somehow
var data = XmlSerializationManager.Serialize(myEntities);
// 'data' gets saved to disk somewhere as a file

然后,如果我将代码/名称空间复制到AssemblyB,以便我有名称空间AssemblyA.Entities和完全相同的代码:

public IEntity
{
    string Name { get; set; }
}

[Serializable]
public Entity : IEntity
{
    public string Name { get; set; }
}

如果我尝试反序列化以前序列化的XML,我会收回AssemblyB的{​​{1}}列表吗?或者它会失败吗?

序列化程序在什么时候停止关注它反序列化的内容?装配可以不同吗?命名空间可以有所不同吗?只要属性名称相同,类型名称是否重要?

1 个答案:

答案 0 :(得分:1)

这会奏效。您将获得AssembyB实体。

当客户端基于wsdl中的信息来构建类时,Web服务本质上是如何工作的,然后客户端会将SOAP消息中的数据反序列化到这些脚手架类中。