1

我正在将 Silverlight 与 WCF 一起使用。我有一个相当复杂的对象,我想发送到服务器。该对象在多个服务之间共享,因此不能成为数据合约。我想知道是否有一种简单的方法可以自己进行序列化。一种适用于 .Net 4(服务器端)和 Silverlight 4(客户端)的方式。

请注意,我没有使用 RIA 服务,因为自从我开始使用 RIA 服务以来,它就一直困扰着我。

编辑:

我尝试使用DataContractAttributeandDataMemberAttribute无济于事。我从服务中得到以下异常:

System.IO.FileNotFoundException:无法加载文件或程序集“System.Runtime.Serialization,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e”或其依赖项之一。该系统找不到指定的文件。文件名:'System.Runtime.Serialization,版本=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e'

原因似乎很明显。我相信这是因为包含 POCO 的 DLL 是 Silverlight 类库。这是我知道在我的 WCF 服务和我的 Silverlight 客户端之间共享对象的唯一方法。我认为,问题在于 Silverlight DLL 使用的是 Silverlight 版本,System.Runtime.Serialization因此 POCO 不能在非 Silverlight 环境中使用。我必须在多个服务之间共享这个 POCO,所以它必须存在于一个单独的程序集中。

这就是为什么想控制我如何序列化我的对象;在对象本身内部序列化它们。

4

2 回答 2

2

我会推荐 Json.NET。您可以下载支持 .Net 和 Silverlight的NuGet 包。

连载:

string json = JsonConvert.SerializeObject(myObj);

反序列化:

var myObj = JsonConvert.DeserializeObject<MyObject>(json);
于 2012-05-23T18:23:59.990 回答
1

DataContractSerializer支持 Silverlight 和 .NET 4.0 中的POCO 类型。您可以尝试一下,它应该可以正常工作。

编辑后更新:您不能从 .NET Framework 引用为 Silverlight 构建的库,它们引用不同的程序集。你有几个选择:

  • 创建两个类库项目,一个用于 SL,另一个用于完整框架。在其中一个项目中添加文件,在另一个项目中添加指向它们的链接。我已经做了很多次并且工作正常。
  • 创建便携式库 (PL) 程序集。我没有尝试过,但这正是 PL 的目标——在不同的 .NET 版本之间共享程序集。你可以试试看它是否有效。
于 2012-05-23T16:20:56.950 回答