2

我有一个复杂的对象层次结构,在将 Silverlight 与 WCF 结合使用时,我一直在努力解决它的整体传递问题。我已经尝试过 DataContractSerializer ,主要问题是我正在尝试使用具有多个循环引用的 Dictionary 并且无法使其正常工作。

我已经转而查看 protobuf-net,认为无论如何使用二进制格式可能会更好。我希望能够进行大量查找和替换以将 ProtoMember 属性添加到属性中。然而,许多使用 DataMember 属性序列化的属性被声明为 Friend (vb.net)。我发现 protobuf-net 在反序列化时会抛出错误,说

Attempt by method <blah> to access field <fieldname> failed.

我发现将字段设置为受保护会导致相同的错误,解决此问题的唯一方法是将字段设置为公共 - 这是我不想做的事情。是否可以在字段支持的属性上使用受保护的 setter 或类似方法来执行此操作?虽然这会很痛苦(许多字段/属性和类),但至少可以解决问题。后端的序列化工作正常。

如果这是不可能的,任何人都可以建议我如何获得具有循环引用的复杂对象层次结构,其中包括完整形式的多个字典?我意识到 Silverlight 为这个过程增加了一些限制,但希望有人已经成功了。

注意这是 Silverlight 5

4

1 回答 1

0

在 Silverlight 中:不;运行时有更高层次的偏执狂,你只是无法触及其他类型的非公共部分。甚至SilverlightDataContractSerializer页面也有警告:

您可以序列化字段和属性,前提是它们可以公开访问。

我的理解是,这在 Silverlight 上是无法避免的。

于 2011-12-20T07:15:00.017 回答