classe marquée comme [DataContract] ne peut pas être isérialisable en même temps. OK, alors comment puis-je sérialiser ce type d'objet à un flux binaire?
private byte[] GetRoomAsBinary(Room room)
{
MemoryStream stream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream, room);
return stream.ToArray();
}
3 Réponses :
C'est le principe de la sérialisation binaire: seules les classes [sérialisable] peuvent être sérialisées (bien que j'ai pu lire que cette restriction a été levée récemment). Si vous souhaitez prendre le contrôle du processus de sérialisation, implémentez Iséralisable. P>
Si la classe de la chambre a des membres non sérialisables, vous aurez également besoin d'une isorialisable. P>
Quels sont les membres de la chambre? p>
Comme je l'ai écrit: vous ne pouvez pas avoir une classe sérialisable et Datacontract dans le même temps. Cela jette une exception au moment de l'exécution
Est-il acceptable d'avoir une copie de la classe de la chambre, dites la salleProxy avec les mêmes membres, sérialisable mais non impliquée dans un Datacontract? Afin d'éviter la duplication, on pourrait avoir une sous-classe de pièce qui n'est pas marquée comme [Datacontract]; Il pourrait être sérialisé en mettant en œuvre isherialisable.
La solution consiste à utiliser DatacontractSerializer pour sérialiser l'objet. P>
DatacontractSerializer code> génère et lit XML. Et XML n'est pas binaire.
usage: strong> p>