2011-09-01 44 views
2

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

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

+1

关于不兼容性的信息来源是什么? – AnthonyWJones

+1

@Anthony:我在Test项目中得到一个运行时异常,声称无法找到System.Runtime.Serialization.dll(Silverlight版本),这一事实让我注意到Silverlight和.NET 4中可用的版本不同(Silverlight 4项目显示为v2.0.50727,.NET 4测试项目显示为v4.0.30319) –

+0

对于serlization,__implementation__不同(它们运行在不同的运行时间),但生成的格式是相同的,否则将会是什么点? – AnthonyWJones

回答

0

今天早上我意识到我已经从非Silverlight项目中添加了对Silverlight项目的引用,并且VS 警告关于这不是一个好主意,但仍然允许非Silverlight项目运行。因为在每个项目中引用了不同版本的System.Runtime.Serialization,所以单元测试因无法加载该DLL而中止。

0

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

http://code.google.com/p/protobuf-net/

他们将一些制约你的业务对象(合约,而)的实施,例如:空和空藏品被认为等同于仅举一例。

1

为此目的,我会使用DataContractJsonSerializer。这将您的业务对象序列化为json。它从3.5开始支持Silverlight和.NET Framework。

一个示例如何使用串行器可以找到here