【发布时间】: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