Objekt zu ByteArray

Snowcrack

Mitglied
Hallo,
weiß jemand wie man objekte die nicht serializierbar (also nicht als [Serializable()] gekennzeichnet) sind in einen ByteArray umwandelt? Im diesem Fall eine DataRow.

Danke,
Grüße Snowcrack
 
Danke für die schnelle Antwort.
Leider geht das in meinem Fall auch nicht, da die Objekte für diese Methode auch serialisierbar sein müssen.

Hat noch jemand eine Idee
 
Hallo,

das kannst du über einen MemoryStream machen...:
C#:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace De.Tutorials.Training
{
    public class ObjectToByteArrayExample
    {
        public static void Main(string[] args)
        {
            KeyValue<string, string> keyValue = new KeyValue<string, string>("Foo","Bar");
            Console.WriteLine(keyValue + " " + keyValue.GetHashCode());

            byte[] data = ToByteArray(keyValue);

            object o = ToObject(data);

            keyValue = (KeyValue<string, string>)o;

            Console.WriteLine(keyValue + " " + keyValue.GetHashCode());
        }

        private static object ToObject(byte[] data)
        {
            MemoryStream memoryStream = new MemoryStream(data);
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            memoryStream.Position = 0;
            return binaryFormatter.Deserialize(memoryStream);           
        }

        private static byte[] ToByteArray(Object o)
        {
            MemoryStream memoryStream = new MemoryStream();
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            binaryFormatter.Serialize(memoryStream, o);
            memoryStream.Position = 0;
            return memoryStream.GetBuffer();            
        }
    }

    [Serializable]
    class KeyValue<TKey,TValue>
    {
        public TValue Value
        {
            get { return @value; }
            set { @value = value; }
        }private TValue @value;

        public TKey Key
        {
            get { return key; }
            set { key = value; }
        } private TKey key;

        public KeyValue(TKey key, TValue value)
        {
            this.key = key;
            this.value = value;
        }

        public override string ToString()
        {
            return Key +": " + Value;
        }
    }
}

Dazu müssen deine Objekte allerdings Serilizable sein... wenn sie das nicht sind musst du dir da selber was über Reflection bauen. Falls auch XML eine alternative ist würde ich die schnelle XML Serialisierung per XStream empfehlen:
http://code.google.com/p/xstream-dot-net/

Gruß Tom
 
Danke...
Mein Objekt ist eine DataRow. Also nicht Serilizable....

Ich denke dann muss ich einen anderen Lösungsansatz suchen.

Gruß Snowcrack
 
Zurück