我有一个汽车历史数据库。每个汽车历史都有多个与之关联的图像。我正在使用 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/