Silverlight 4和System.Runtime.Serialization

Silverlight 4和System.Runtime.Serialization,serialization,silverlight-4.0,datacontractserializer,Serialization,Silverlight 4.0,Datacontractserializer,我有一个Silverlight4项目,其中包含一些业务对象。我添加了一个测试项目。测试之一是使用DataContractSerializer从Silverlight项目序列化业务对象。要引用DataContractAttribute,我必须添加对System.Runtime.Serialization的引用。但是,在Silverlight运行时和测试项目的.NET4运行时中有不同的、显然不兼容的版本 在Silverlight项目中序列化对象以便标准.NET 4运行时使用它们的最佳策略是什么?如果

我有一个Silverlight4项目,其中包含一些业务对象。我添加了一个测试项目。测试之一是使用
DataContractSerializer
从Silverlight项目序列化业务对象。要引用
DataContractAttribute
,我必须添加对
System.Runtime.Serialization
的引用。但是,在Silverlight运行时和测试项目的.NET4运行时中有不同的、显然不兼容的版本

在Silverlight项目中序列化对象以便标准.NET 4运行时使用它们的最佳策略是什么?

如果您的对象允许(关于下面提到的约束),请尝试序列化程序(如protobuf bet)或其他协议缓冲区实现之一


它们对业务对象(契约)的实现施加了一些约束,例如,空集合和空集合被认为等同于命名一个示例

为此,我将使用。这会将业务对象序列化为json。它从3.5开始就在Silverlight和.NET Framework中得到支持


可以找到如何使用序列化程序的示例。

我今天早上意识到我添加了一个来自非Silverlight项目的Silverlight项目的引用,VS警告说这不是一个好主意,但仍然允许非Silverlight项目运行。由于每个项目中引用了不同版本的
System.Runtime.Serialization
,因此单元测试因无法加载该DLL而中止。

关于不兼容性的信息来源是什么?@Anthony:事实上,我在测试项目中得到了一个运行时异常,声称该System.Runtime.Serialization.DLL(Silverlight版本)找不到导致我注意到Silverlight和.NET 4中可用的版本不同(Silverlight 4项目显示的是v2.0.50727,.NET 4测试项目显示的是v4.0.30319)以及serlization的实现不同(它们在不同的运行时上运行)但是生成的格式是一样的,否则有什么意义呢?@Anthony:我完全同意。见下面我的答案。