正如previous posts中提到的,当一个对象列表(一个更大的对象的成员)用AsReference属性标记时,它的元素确实被序列化/反序列化为引用。然而 列表本身未作为参考序列化。此行为会破坏对象图的完整性。特别是,它与MS BinaryFormatter的功能不同。我想知道这个限制来自何处以及将它作为可选功能需要什么?
我评估将具有SQL状态会话的巨大ASP.NET应用程序从BinaryFormatter迁移到ProtoBuf-net序列化以提高性能。该应用程序是公平的 复杂的数据模型都保存在Session中,所以上面似乎是一个潜在的bug。顺便问一下,你能回想起BinaryFormmater和ProtoBuf.net之间在行为方面的其他重大差异吗?
答案 0 :(得分:2)
“需要什么”只是我花了几分钟来设计,实现(两次:运行时与元编程),单元测试(两次:运行时与MP),回归测试(两次......) ),文档,部署等。它不是巨大的事物
一个实用的选项可能是封装列表,这样你就不会直接需要引用列表 - 即代替:
objA objB
> theList > theList
你可能有
objA objB listWrapper
> listWrapper > listWrapper > theList
显然不是非常方便,但它今天 。不过,我在路线图上支持这种情况。
其他重大差异......这完全取决于你的状态模型(在 情况下我建议使用一个相当简单的DTO模型)。但是想到的事情是: