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

标签 c# nhibernate json.net

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

相关文章:

c# - Selenium ChromeDriver 在构建服务器上返回 403 错误

c# - JSON.net - 使用路径字符串写入 JSON/JObject

c# - 将 WCF 4 中的默认 JSON 序列化程序替换为 JSON.NET

c# - 当前几个 JSON 项具有非十进制值时,将动态 JSON 反序列化为 DataTable 会丢失小数

C# List + 对象引用未设置为对象的实例

c# - 从 C# 调用 F# 时,OO 替代 F# 中的多态性

nhibernate - QueryOver API 中的 SQL Where 表达式

database - 使用 Fluent NHibernate 使用 Nhibernate 生成数据库

nhibernate - 适用于 Mono、MonoTouch 和 ASP.NET MVC 的 ORM

c# - DataTable 上的数据透视逻辑 LINQ