【问题标题】:Deserialize matching types from different assemblies反序列化来自不同程序集的匹配类型
【发布时间】:2014-10-14 19:39:45
【问题描述】:

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

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 的 AssemblyA.Entities.IEntity 列表吗?还是会失败?

序列化程序在什么时候停止关心它要反序列化到什么?组装可以不同吗?命名空间可以不同吗?只要属性名称相同,类型名称是否重要?

【问题讨论】:

  • 您可以在序列化文本中查找完全限定类型名称。如果它们在那里,则有关程序集的信息将由该特定序列化程序在序列化时持久化。

标签: c# serialization xml-serialization assemblies


【解决方案1】:

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

当客户端根据 wsdl 中的信息搭建类时,这实质上就是 Web 服务的工作方式,然后客户端会将来自 soap 消息的数据反序列化到这些搭建的类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多