我试图序列化类B
作为它的基类A
的实例。 DataContractSerializer
不会允许我这样做。将继承类型的DataContract序列化为基类型
一个例子失败的系列化如下:
class Program
{
[DataContract]
public class A
{
public int Id { get; set; }
}
[DataContract]
public class B : A
{
}
static void Main(string[] args)
{
A instance = new B { Id = 42 };
var dataContractSerializer = new DataContractSerializer(typeof(A));
var xmlOutput = new StringBuilder();
using (var writer = XmlWriter.Create(xmlOutput))
{
dataContractSerializer.WriteObject(writer, instance);
}
}
}
我知道,这个问题很容易解决通过添加KnownTypes
属性。 但是我想保留从项目中隐藏的类B
(不添加引用)。
完全可以实现我想要的吗?我尝试了XmlSerializer
,但它给了我同样的问题(它在XML中添加了完整的实例类型名称),并且使用起来更笨拙。
它必须是XML?或者必须只是工作? – 2010-12-10 16:15:12
它可以工作。尽管最小麻烦会很好。 – R4cOON 2010-12-13 07:37:37