我有一个复杂的对象层次结构,当我将Silverlight与WCF一起使用时,我一直在努力将其全部传递到网上。我已经尝试过将DataContractSerializer用于死亡,主要问题是我正在尝试使用Dictionary,多个循环引用并且无法使其工作。
我已经转而关注protobuf-net认为无论如何都可能更好地使用二进制格式。我希望能够进行大量的查找和替换,以将ProtoMember属性添加到属性中。但是,许多使用DataMember属性序列化的属性被声明为Friend(vb.net)。我发现protobuf-net在反序列化时抛出错误,说
Attempt by method <blah> to access field <fieldname> failed.
我发现将字段设置为protected会导致同样的错误,唯一的办法是将字段设置为public - 这是我不想做的事情。是否可以使用受保护的setter或类似的字段支持该属性?虽然这将是一个痛苦(许多领域/属性和类),它至少会解决问题。后端的序列化工作正常。
如果这是不可能的,那么有人可以建议我如何通过循环引用来获得复杂的对象层次结构,这些引用包括完整形式的多个字典?我意识到Silverlight为这个过程增加了一些限制,但希望有人已经成功了。
请注意,这是Silverlight 5
答案 0 :(得分:0)
在Silverlight中:不;运行时具有更高级别的偏执,而你无法获得其他类型的非公共部分。即使是Silverlight DataContractSerializer
page也有警告:
您可以序列化字段和属性,前提是它们可以公开访问。
我的理解是Silverlight无法避免这种情况。