Я пытаюсь сериализовать класс B
как экземпляр базового класса 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) и намного более неудобен в использовании.