gpt4 book ai didi

c# - JSON.NET 和 nHibernate,在序列化时忽略延迟加载的对象

转载 作者:行者123 更新时间:2023-11-30 17:58:09 24 4
gpt4 key购买 nike

我有一个汽车历史数据库。每个汽车历史都有多个与之关联的图像。我正在使用 NHibernate 2.2 来设置关系,CarHistory 映射包含一个图像包:

<bag name="Photos" table="DetailPhoto" cascade="all" lazy="true">
<key column="CAR_DETAIL_ID"/>
<one-to-many class="DetailPhoto"/>
</bag>

我有一个 iPad 应用程序,它使用 JSON 与服务器通信。我想将所有汽车历史项目加载到 iPad 上的列表中,并且我不想在加载列表时包含照片,因为它会减慢数据检索速度,这就是我将照片设为惰性的原因。

当我尝试使用 JsonConvert.SerializeObject 序列化我的汽车历史记录列表时,我得到一个延迟初始化异常,这是因为我已经加载了我的对象并关闭了 session ,因为我不需要照片并且 JsonSerializer 正在接触对象的所有属性。

我想在没有照片的情况下将 Json 数据返回给客户端,但我不能在我的对象上使用忽略 JsonProperty,因为我想在其他情况下加载此集合。

我已经试过了,但它只是做了同样的事情,给了我延迟初始化异常: http://www.royjacobs.org/2011/07/27/using-json-net-to-serialize-proxied-nhibernate-objects/

这是我的 CarHistory (CarDetail) 类

 public class CarDetail
{
[JsonProperty("id")]
public virtual int Id { get; set; }

[JsonProperty("carId")]
public virtual int CarId { get; set; }

[JsonProperty("date")]
public virtual DateTime ? Date { get; set; }

[JsonProperty("details")]
public virtual string Details { get; set; }

[JsonProperty("photos")]
public virtual IList<DetailPhoto> Photos { get; set; }
}

所以我的问题是,在某些情况下而不是其他情况下,如何检索没有关联照片的 CarHistories 列表?

最佳答案

对于这种情况,您通常希望在“连接的”域对象和序列化格式之间建立一个层。我通常创建一个数据传输对象,它类似于域模型对象,但通常没有直接关联,而只有 ID 列表。然后我使用 Automapper在数据传输对象和域对象之间进行映射。

关于c# - JSON.NET 和 nHibernate,在序列化时忽略延迟加载的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com