我有一个复杂的对象层次结构,在将 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