2010-06-22 70 views
0

现在我在SilverlightSilverlight的对象二进制序列化到数据库

编程多人卡片游戏我想知道如何存储对象最好二进制在SQL数据库中。

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

你会如何做到这一点与Silverlight + RIA服务?尤其是在Silverlight中序列化对象的部分。

谢谢

回答

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; 
     } 
    } 
} 
1

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

+0

因此,可以发送我的GameState对象并将其序列化为服务器端。如果我添加一个调用操作,我得到一个编译器错误: 参数类型必须是实体类型或预定义的可序列化类型之一 – Ben 2010-06-22 18:50:15

+0

因为无论如何RIA只是序列化它。 RIA序列化您发送到服务器的任何内容,并且速度应该非常快。如果您真的担心速度问题,可以在客户端将GameState对象序列化为XML,然后将其发送回RIA,但我认为在服务器和客户端上处理序列化之间的速度差异可能可以忽略不计。 – Ben 2010-06-22 20:49:35

+0

它不应该花很长时间才能将对象从客户端发送到服务器 – Stephan 2010-06-22 20:49:43

1

首先,你不可能简单地在服务器上序列化一些东西。它必须在可以发送到服务器之前被序列化。但是,似乎你可能让事情变得太复杂/神奇。根据你所说的,我将从实体框架中定义我的GameState对象(以及任何其他需要的对象)开始。包括保存游戏状态所需的任何和所有字段。那么你应该可以让框架创建所需的表格。

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

+0

谢谢, 所以,你的意思是在我玩卡牌游戏的时候,我会为玩家手中的桌子,操场上的桌子和玩家甲板上的桌子等等。 之后我必须将它添加到我的实体框架和RIA服务中。 这就是我之前做的。但我想知道表现。 只有一个表格GameState有一个大的二进制字段,整个类都保存进去不是更好吗? – Ben 2010-06-23 08:34:03

+0

我不认为你会找到一种神奇的方式将整个事物推入一些二进制数据。如果你能那么也许。同时专注于确保您使用关系数据消除任何重复的信息。然后,您可以设置您的查询,以将相关实体包含在对该服务的单个调用中。 – Kirk 2010-07-07 03:48:39