Ich habe eine Person Objekt und muss es als Byte speichern [] und wieder abrufen dieses Byte [] und zu Person Objekt konvertieren und BinaryFormatter ist availabe nicht in Silverkonvertieren Objekt (dh jedes Objekt wie Person, Mitarbeiter) zu Byte [] in Silverlight
Antwort
verwenden serialisierte Klasse das Objekt in ein Byte über unter Verwendung eines Memory
using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; .... byte[] bPersonInfo = null; using (MemoryStream mStream = new MemoryStream()) { System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(mStream, personInfo); bPersonInfo = mStream.ToArray(); } .... // Do what you have to do with bPersonInfo which is a byte Array... // To Convert it back PersonInfo pInfo = null; using (MemoryStream mStream = new MemoryStream(bPersonInfo)){ System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new BinaryFormatter(); pInfo = (PersonInfo)bf.DeSerialize(mStream); } // Now pInfo is a PersonInfo object.
hoffe, das hilft, mit freundlichen Grüßen, Tom zu konvertieren.
Ich habe XML-Serializer verwendet, um das Objekt in eine Zeichenfolge zu konvertieren, und sie konvertieren die Zeichenfolge in Silverlight erfolgreich in Byte [].
object address = new Address();
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Address));
StringBuilder stringBuilder = new StringBuilder();
using (StringWriter writer = new StringWriter(stringBuilder))
{
serializer.Serialize(writer, address);
}
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] data = encoding.GetBytes(stringBuilder.ToString());
Da die von t0mm13b genannte Namespaces nicht Teil der Silverlight .NET-Engine ist, ist der richtige Weg, um diese Abhilfe zu verwenden, um den Datenvertrag Serializer Nutzung:
http://forums.silverlight.net/forums/t/23161.aspx
Von Link :
string SerializeWithDCS(object obj)
{
if (obj == null) throw new ArgumentNullException("obj");
DataContractSerializer dcs = new DataContractSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
dcs.WriteObject(ms, obj);
return Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Position);
}
Wenn Sie wirklich binär brauchen und wollen es super schnell und sehr klein sein, dann sollten Sie protobuf von Google verwenden.
http://code.google.com/p/protobuf-net/
Sehen sie sich diese Performance-Zahlen. Protobuf ist weit und weg der schnellste und kleinste.
ich verwendet habe, es für WCF < -> Silverlight mit Erfolg und würde nicht zögern, es für ein neues Projekt wieder zu verwenden.
Ich habe das gleiche Problem beim Konvertieren einer bestehenden Winforms App zu Silverlight. Die bestehende Funktion mit den unzulässigen Funktionen AllocHGlobal und FreeHGlobal ist: public static byte [] RawSerialize (object irgendetwas) { int rawsize = Marshal.SizeOf (alles); IntPtr Puffer = Marshal.AllocHGlobal (Rawsize); Marshal.StructureToPtr (alles, Puffer, falsch); byte [] rawdatas = neues Byte [rawsize]; Marshal.Copy (Puffer, Rawdatas, 0, Rawsize); Marshal.FreeHGlobal (Puffer); Rückkehr Rawdatas; } – Jeffrey