如何手动序列化我的POCO?

时间:2012-05-23 16:06:46

标签: wcf silverlight serialization

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

请注意,我没有使用RIA服务,因为自从我开始使用RIA服务以来,RIA服务一直是我的巨大痛苦。

编辑:

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

  

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

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

这就是想要控制我如何序列化对象的原因;在对象本身内序列化它们。

2 个答案:

答案 0 :(得分:2)

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

序列化:

string json = JsonConvert.SerializeObject(myObj);

反序列化:

var myObj = JsonConvert.DeserializeObject<MyObject>(json);

答案 1 :(得分:1)

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

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

  • 创建两个类库项目,一个用于SL,另一个用于完整框架。在其中一个项目中添加文件,在另一个项目中添加链接。我做了很多次,工作正常。
  • 创建可移植库(PL)程序集。我没有尝试过,但这正是不同.NET版本之间PL共享程序集的目标。您可以尝试查看它是否有效。