现在我在Silverlight中编写多人纸牌游戏
我想知道如何在sql数据库中存储对象最佳二进制文件。
我有一个GameState对象,其中包含两个玩家之间游戏的当前状态。我想将这个对象存储在一个sql数据库中,玩家可以随时访问和更改它。
您如何使用Silverlight + RIA服务实现这一目标?特别是在Silverlight中序列化对象的部分。
由于
答案 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