J'ai un problème de sérialisation. Je veux convertir un objet en chaîne et vice versa. J'ai deux méthodes utilitaires:Problème de sérialisation
public
static byte[] Serialize(Object o)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf1 = new BinaryFormatter();
bf1.Serialize(ms, o);
byte[] buffer = ms.ToArray();
//string retStr = Convert.ToBase64String(buffer);
return buffer;
}
public static object Deserialize(byte[] TheByteArray)
{
//byte[] TheByteArray = Convert.FromBase64String(ParamStr);
MemoryStream ms = new MemoryStream(TheByteArray);
BinaryFormatter bf1 = new BinaryFormatter();
ms.Position = 0;
return bf1.Deserialize(ms);
}
Mon code de test est:
Student obj = new Student();
obj.UserName = "Admin";
obj.Password = "Password";
obj.lessonIds = new int[] { 1, 2, 3, 4, 5 };
obj.lessonNames= new string[] { "Spanish", "Maths" };
obj.Id= 43;
byte[] retByteArray = Crypto.Serialize(obj);
Student objNew = new Student();
objNew = (Student)Crypto.Deserialize(retByteArray);
ce code ne fonctionne pas. Le message d'erreur est: Une exception a été émise par la cible d'un appel. Fin du flux rencontré avant que l'analyse ne soit terminée.
Fin mon principal objectif est de convertir l'objet en chaîne, mais je ne peux pas convertir même dans tableau d'octets
Qu'est-ce Cryto référence aussi? –
Ce n'est pas le bogue, mais vous n'avez pas besoin de Étudiant objNew = new Student(); avant d'appeler Désérialiser. Vous ne faites que créer un objet et le remplacer par un autre. –
Re votre commentaire - puis simplement, vous le désérialisez incorrectement. Il * vraiment * ne vaut pas la peine d'essayer d'écrire votre propre code de sérialisation - je recommande fortement d'essayer protobuf-net (mise en garde: je suis l'auteur, mais c'est gratuit). Il a fallu quelques secondes pour appliquer à votre exemple, donnant des résultats très efficaces sans le risque de ces bogues de flux ennuyeux. –