Silverlight对象二进制序列化到数据库

时间:2010-06-22 18:10:42

标签: c# .net silverlight serialization

现在我在Silverlight中编写多人纸牌游戏

我想知道如何在sql数据库中存储对象最佳二进制文件。

我有一个GameState对象,其中包含两个玩家之间游戏的当前状态。我想将这个对象存储在一个sql数据库中,玩家可以随时访问和更改它。

您如何使用Silverlight + RIA服务实现这一目标?特别是在Silverlight中序列化对象的部分。

由于

4 个答案:

答案 0 :(得分:1)

我会在服务器端进行序列化。将Invoke操作添加到接受GameState对象的RIA服务域上下文中。在服务器端,您可以使用标准的.NET序列化(我个人建议使用XML序列化而不是二进制,但它应该无关紧要。)

答案 1 :(得分:1)

首先,您不可能简单地在服务器上序列化某些内容。必须先将其序列化,然后才能将其发送到服务器。但似乎也许你正在制造太复杂/神奇的东西。

鉴于你所说的,我将首先在Entity Framework中定义我的GameState对象(以及你需要的任何其他对象)。包括保存游戏状态所需的任何和所有字段。然后你应该能够让框架创建所需的表。

完成此操作后,将DomainService添加到Web项目中,然后在编译对象时,可以在Silverlight项目中使用。

答案 2 :(得分:0)

最后我决定使用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;
        }
    }
}

答案 3 :(得分:-1)

我发现SharpSerializer软件包非常易于用于Silverlight中的快速二进制序列化:http://www.sharpserializer.com/en/index.html