我正在使用Silverlight和WCF。我有一个相当复杂的对象,我想发送到服务器。此对象在多个服务之间共享,因此不能是数据协定。我想知道是否有一种简单的方法可以自己进行序列化。一种适用于.Net 4(服务器端)和Silverlight 4(客户端)的方法。
请注意,我没有使用RIA服务,因为自从我开始使用RIA服务以来,RIA服务一直是我的巨大痛苦。
我试图使用DataContractAttribute
和DataMemberAttribute
无济于事。我从服务中得到以下异常:
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,因此它必须存在于单独的程序集中。
这就是我想要控制我如何序列化对象的原因;在对象本身内序列化它们。
答案 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构建的库,它们引用不同的程序集。你有几个选择: