La sérialisation/désérialisation avec des flux de mémoire
Je vais avoir un problème avec la sérialisation à l'aide de flux de mémoire. Voici mon code:
///<summary>
///serializes the given object into memory stream
///</summary>
///<param name="objectType">the object to be serialized</param>
///<returns>The serialized object as memory stream</returns>
public static MemoryStream SerializeToStream(object objectType)
{
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, objectType);
return stream;
}
///<summary>
///deserializes as an object
///</summary>
///<param name="stream">the stream to deserialize</param>
///<returns>the deserialized object</returns>
public static object DeserializeFromStream(MemoryStream stream)
{
IFormatter formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin);
object objectType = formatter.Deserialize(stream);
return objectType;
}
L'erreur que j'obtiens est comme suit:
stream n'est pas valide d'un format binaire. Le départ de contenu (en octets) sont: blablabla....
Je ne suis pas exactement sûr de ce qui est à l'origine de l'erreur. Toute aide serait grandement appréciée.
Exemple de l'appel:
Dog myDog = new Dog();
myDog.Name= "Foo";
myDog.Color = DogColor.Brown;
MemoryStream stream = SerializeToStream(myDog)
Dog newDog = (Dog)DeserializeFromStream(stream);
- Fournir le code que vous utilisez pour appeler vos méthodes.
- pouvez-vous nous montrer comment vous en utilisant ce code ? Il est suspect que ce paramètre est appelé objectType
- Je n'ai pas de problème par l'exécution de votre exemple de codes. Avez-vous d'autre part que le fait de traiter avec le courant de l'objet ?
- Même ici, le code fonctionne. Pouvez-vous montrer à votre Chien de la classe ? Qu'est ce que DogColor type ?
Vous devez vous connecter pour publier un commentaire.
Ce code fonctionne pour moi:
Où les types sont comme ceci:
et l'utilité des méthodes sont les suivantes:
Utiliser la Méthode pour Sérialiser et Désérialiser objet de Collection à partir de la mémoire. Cela fonctionne sur la Collection de Types de Données. Cette Méthode va Sérialiser la collecte de tout type de flux d'octets. Créer une salle de Classe
SerilizeDeserialize
et ajouter deux méthodes suivantes:Comment utiliser ces méthodes dans votre Classe:
BinaryFormatter
peut produire une sortie non valide dans certains cas spécifiques. Pour l'exemple on va omettre non appariés caractères de substitution. Il peut aussi avoir des problèmes avec des valeurs de types d'interface. Lire ce page de documentation y compris le contenu de la communauté.Si vous trouvez que votre erreur d'être persistant, vous pouvez envisager d'utiliser XML sérialiseur comme
DataContractSerializer
ouXmlSerializer
.