J'essaie de créer une classe qui contiendra des fonctions de sérialisation/désérialisation d'objets vers/depuis une chaîne. C'est à quoi il ressemble maintenant:Sérialisation et désérialisation binaires sans création de fichiers (via des chaînes)
public class BinarySerialization
{
public static string SerializeObject(object o)
{
string result = "";
if ((o.GetType().Attributes & TypeAttributes.Serializable) == TypeAttributes.Serializable)
{
BinaryFormatter f = new BinaryFormatter();
using (MemoryStream str = new MemoryStream())
{
f.Serialize(str, o);
str.Position = 0;
StreamReader reader = new StreamReader(str);
result = reader.ReadToEnd();
}
}
return result;
}
public static object DeserializeObject(string str)
{
object result = null;
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(str);
using (MemoryStream stream = new MemoryStream(bytes))
{
BinaryFormatter bf = new BinaryFormatter();
result = bf.Deserialize(stream);
}
return result;
}
}
méthode serialiseObjet fonctionne bien, mais DeserializeObject ne fonctionne pas. Je reçois toujours une exception avec le message "End of Stream rencontré avant que l'analyse soit terminée". Qu'est-ce qui ne va pas ici?
c'est super, merci –
@Pindatjuh: C'est incorrect. Base64 code 6 bits par caractère, ce qui signifie que vous allez générer 8/6 - environ 1,33 - octets de sortie pour chaque octet d'entrée. ASCII encode 7 bits par caractère, ce qui signifie que vous générez 8/7 - environ 1,14 - octets de sortie par octet d'entrée. (En supposant ici, avec optimisme, que vous utilisez la plage complète de 7 bits, utiliser seulement 92 caractères, comme vous le proposez, serait légèrement moins efficace.) – LukeH