【发布时间】:2011-05-23 13:38:01
【问题描述】:
我正在尝试将类 B 序列化为 ita 基类 A 的实例。 DataContractSerializer 不允许我这样做。
序列化失败的例子如下:
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?还是只能工作?
-
它可以正常工作。不过,最少的麻烦会很好。
标签: c# inheritance serialization datacontractserializer datacontract