我通过以下方式有一个客户端服务器应用程序。
在域中,某些类具有子类的集合。有些 child 会引用他们的 parent 。
问题在于,当向服务器发出针对子对象的请求时,所有其他子对象都会随响应一起返回。在许多情况下,从子对象访问父对象非常有帮助,我不希望向父对象发出单独的请求,因为这会导致更多的往返。
通常 Nhibernates 延迟加载会处理这个问题,但与 protobuf-net(或任何其他序列化)的交互意味着所有字段都被访问以进行序列化。客户端无法直接访问数据库。
是否可以限制 protobuf-net 或 Nhibernate 中的对象引用深度,以便我可以在对服务器的请求中包含一个标志,表示不要加载超过 2 个对象深度。
例如 订单 - 订单项目 - 交货信息。
订单请求限制为 1 意味着不加载送货信息。限制为 0 意味着不加载订单商品。
或者,是否可以选择停止加载引用(限制为 0 或无限制),这是更严格的限制,但可能更容易实现。
最佳答案
protobuf-net 支持 ShouldSerialize* 模式(与多个 BCL 实现相同,包括 IDE/PropertyGrid 和 XmlSerializer)。
如果你有:
[ProtoMember(1)]
public int Whatever { get; set; }
以及相应的:
public bool ShouldSerializeWhatever() {
...
}
只有当 ShouldSerializeWhatever 返回 true 时,Whatever 才会被序列化。这种模式完全基于名称。该方法可以是公共(public)的或非公共(public)的(但 XmlSerializer 仅接受公共(public)方法,因此如果您使用多个序列化程序,请将其保持为公共(public))。
关于c# - 我可以选择检索 protobuf-net 或 NHibernate 中的对象字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10318802/