繁体   English   中英

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

[英]Silverlight Object Binary Serialization to Database

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

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

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

您将如何使用Silverlight + RIA服务做到这一点? 特别是在Silverlight中序列化对象的部分。

谢谢

我会在服务器端进行序列化。 向您的RIA服务域上下文中添加一个接受GameState对象的Invoke操作。 然后,在服务器端,您可以使用标准的.NET序列化(我个人建议使用XML序列化而不是二进制,但这没关系)。

首先,您可能无法简单地在服务器上序列化某些内容。 必须先对其进行序列化,然后才能将其发送到服务器。 但是似乎您使事情变得太复杂/不可思议了。

有了您所说的,我将从在实体框架内定义我的GameState对象(以及您需要的任何其他对象)开始。 包括保存游戏状态所需的所有字段。 然后,您应该能够使框架创建所需的表。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM