преобразовать объект (то есть любой объект, например, человека, сотрудника) в byte [] в Silverlight - PullRequest
5 голосов
/ 17 февраля 2010

У меня есть объект person, и мне нужно сохранить его как byte [] и снова извлечь этот байт [] и преобразовать в объект person и BinaryFormatter недоступен в Silverlight

Ответы [ 5 ]

6 голосов
/ 13 мая 2011

Поскольку пространства имен, упомянутые в t0mm13b, не являются частью ядра Silverlight .NET, правильный способ - использовать этот обходной путь, используя сериализатор контрактов данных:

http://forums.silverlight.net/forums/t/23161.aspx

Из ссылки:

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);
}
4 голосов
/ 14 мая 2011

Если вам действительно нужен двоичный файл и вы хотите, чтобы он был очень быстрым и очень маленьким, то вам следует использовать protobuf от Google.

http://code.google.com/p/protobuf-net/

Посмотрите на эти показатели производительности. Протобуф - самый быстрый и маленький.

enter image description here

Я успешно использовал его для WCF <-> Silverlight и без колебаний использую его снова для нового проекта.

2 голосов
/ 13 мая 2011

Я использовал XML Serializer для преобразования объекта в строку, и они успешно преобразовали строку в byte [] в Silverlight.

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());
0 голосов
/ 13 мая 2011

Посмотрите на пользовательскую двоичную сериализацию и сжатие здесь

и здесь

0 голосов
/ 17 февраля 2010

Использование сериализованного класса для преобразования объекта в байт с помощью MemoryStream

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.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...