Silverlight的对象二进制序列化到数据库
现在我在SilverlightSilverlight的对象二进制序列化到数据库
编程多人卡片游戏我想知道如何存储对象最好二进制在SQL数据库中。
我有一个GameState对象,其中包含两个玩家之间的游戏的当前状态。我想将这个对象存储在一个sql数据库中,玩家可以随时访问并更改它。
你会如何做到这一点与Silverlight + RIA服务?尤其是在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;
}
}
}
我会做服务器端的序列化。将Invoke
操作添加到接受GameState对象的RIA服务域上下文中。在服务器端,您可以使用标准的.NET序列化(我个人建议使用XML序列化代替二进制文件,但它应该没关系)。
首先,你不可能简单地在服务器上序列化一些东西。它必须在可以发送到服务器之前被序列化。但是,似乎你可能让事情变得太复杂/神奇。根据你所说的,我将从实体框架中定义我的GameState对象(以及任何其他需要的对象)开始。包括保存游戏状态所需的任何和所有字段。那么你应该可以让框架创建所需的表格。
完成此操作后,将一个DomainService添加到Web项目中,然后在您编译这些对象时将在您的Silverlight项目中可用。
我发现SharpSerializer包非常易于使用的快速二进制serlization在Silverlight中:http://www.sharpserializer.com/en/index.html
因此,可以发送我的GameState对象并将其序列化为服务器端。如果我添加一个调用操作,我得到一个编译器错误: 参数类型必须是实体类型或预定义的可序列化类型之一 – Ben 2010-06-22 18:50:15
因为无论如何RIA只是序列化它。 RIA序列化您发送到服务器的任何内容,并且速度应该非常快。如果您真的担心速度问题,可以在客户端将GameState对象序列化为XML,然后将其发送回RIA,但我认为在服务器和客户端上处理序列化之间的速度差异可能可以忽略不计。 – Ben 2010-06-22 20:49:35
它不应该花很长时间才能将对象从客户端发送到服务器 – Stephan 2010-06-22 20:49:43