2008-11-17 4 views
0

J'ai la structure suivante:Comment correctement sérialiser une classe de base en JSON dans Silverlight?

class Base 
{ 
} 

class Child : Base 
{ 
} 

Lorsque je tente de faire ce qui suit:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Base)); 
serializer.WriteObject(stream, data); 

Il échoue avec le message d'erreur:

type 'MyNamespace.Child' avec le nom du contrat de données 'Enfant: http://schemas.datacontract.org/2004/07/MyNamespace' n'est pas prévu. Ajoutez tous les types non connus statiquement à la liste des types connus - par exemple, en utilisant l'attribut KnownTypeAttribute ou par en les ajoutant à la liste des types connus passés à DataContractSerializer.

Est-ce que quelqu'un sait comment sérialiser correctement la classe enfant?

Répondre

3

Si vous ajoutez le KnownType attribute (de System.Runtime.Serialization) à la classe de base pour la classe enfant, alors il fonctionnera:

[KnownType(typeof(Child))] 
class Base 
{} 

class Child : Base 
{} 

Cela est nécessaire parce que le sérialiseur ne charge pas votre type d'enfant lorsque vous le configurez pour sérialiser la classe de base (du moins c'est ce que je comprends).

+0

Vous avez raison. Fonctionne de la même manière avec la sérialisation XML. –

+0

Malheureusement, la classe de base se trouve dans un espace de noms distinct de la classe enfant. Et l'espace de noms de classe de base n'a aucune connaissance de l'espace de noms de classe enfant. –

+0

Ensuite, il n'y a vraiment aucun moyen de le faire. – Bryant

Questions connexes