J'essaie de sérialiser la classe B
en tant qu'instance de classe de base A
. Le DataContractSerializer
ne me permettra pas de faire cela.Sérialisation DataContract d'un type hérité dans un type de base
Un exemple à défaut de sérialisation est la suivante:
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);
}
}
}
Je sais que la question est facilement résolu par l'attribut ajouté KnownTypes
. Cependant, je veux garder la classe B
cachée du projet (pas ajouter une référence).
Est-il possible de réaliser ce que je veux? J'ai essayé le XmlSerializer
mais il m'a donné le même problème (il a ajouté le nom de type d'instance complet dans le XML) et est beaucoup plus clunkier à utiliser.
Est-ce qu'il doit être XML? Ou doit-il fonctionner juste? –
Ça peut juste marcher. Les tracas minimum seraient bien cependant. – R4cOON