我試圖序列化類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