【发布时间】:2014-09-18 14:37:25
【问题描述】:
给定一个类和一个子类
public class Base
{
public string Name { get; set; }
}
public class Derived : Base
{
public string Extra {get; set; }
}
还有一个通用列表
var list = new List<Base>();
我想防止这种情况发生:
var b = new Base { Name = "base" };
var d = new Derived { Name = "derived", Extra = "stuff" };
list.Add(b); // this is good
list.Add(d); // this is BAD
想要阻止这种情况的原因是列表将以丢失类型信息的方式进行序列化,然后重新序列化为List<Base>。从Base 派生的任何项目都需要向下转换为反序列化程序未知的类型(我当然不希望使用反射来查找从 Base 继承并具有“额外”属性的类)。也许我会努力解决这个问题,这可能会导致另一个问题。但是现在,我可以通过阻止派生对象添加到通用列表来避免这个问题吗?
【问题讨论】:
-
它们可能有用...如何将不同的对象放入列表中并对其进行序列化/反序列化并保留所有类型信息:weblogs.asp.net/stevewellens/…
-
@Mephy:如果我了解 Liskov 在这里的应用方式,也许答案是向上转换在序列化之前添加的任何派生对象。在此示例中,这将删除
Extra。然后反序列化只会看到一个统一的列表。这很有意义。
标签: c# generics serialization