Двоичная сериализация объекта Silverlight в базе данных - PullRequest
0 голосов
/ 22 июня 2010

Сейчас я программирую многопользовательскую карточную игру в Silverlight

Мне интересно, как сохранить лучший двоичный объект в базе данных SQL.

У меня есть объект GameState, который содержит текущее состояние игры между двумя игроками. Я хочу сохранить этот объект в базе данных sql, к которой оба игрока могут обращаться и изменять его в любое время.

Как бы вы сделали это с помощью Silverlight + RIA Services? Особенно часть, где вы сериализуете объект в Silverlight.

Спасибо

Ответы [ 4 ]

1 голос
/ 23 июня 2010

Во-первых, вы не можете просто сериализовать что-то на сервере.Он должен быть сериализован перед отправкой на сервер.Но, возможно, вы делаете вещи слишком сложными / волшебными.

Учитывая то, что вы сказали, я бы начал с определения моего объекта GameState (и любого другого необходимого вам объекта) внутри Entity Framework.Включите все поля, необходимые для сохранения состояния игры.Тогда у вас будет возможность создать необходимую среду для создания таблиц.

Как только вы это сделаете, добавьте DomainService в веб-проект, и после компиляции объекты будут доступны внутри вашего проекта Silverlight.

1 голос
/ 22 июня 2010

Я бы сделал сериализацию на стороне сервера.Добавьте операцию Invoke в контекст домена службы RIA, который принимает ваш объект GameState.На стороне сервера вы можете использовать стандартную сериализацию .NET (лично я бы рекомендовал сериализацию XML вместо двоичной, но это не должно иметь значения).

0 голосов
/ 03 апреля 2011

Я нашел пакет SharpSerializer очень простым в использовании для быстрой бинарной серизации в Silverlight: http://www.sharpserializer.com/en/index.html

0 голосов
/ 24 июня 2010

Наконец я решил использовать сериализацию XML.

Я нашел отличную статью о сериализации XML: http://www.ingebrigtsen.info/post/2008/11/29/Serialization-in-Silverlight.aspx

Вот как это выглядит в моем коде Silverlight:

public static class MySerializer
{
    public static string Serialize<T>(T data)
    {
        using (var memoryStream = new MemoryStream())
        {
            var serializer = new DataContractSerializer(typeof(T));
            serializer.WriteObject(memoryStream, data);

            memoryStream.Seek(0, SeekOrigin.Begin);

            var reader = new StreamReader(memoryStream);
            string content = reader.ReadToEnd();
            return content;
        }
    }

    public static T Deserialize<T>(string xml)
    {
        using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(xml)))
        {
            var serializer = new DataContractSerializer(typeof(T));
            T theObject = (T)serializer.ReadObject(stream);
            return theObject;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...