3

我有一个现有的应用程序,它使用 NHibernate 从已经运行了一段时间的数据库(SQL Server 2008 R2)加载一些相当复杂的对象。

今天,我在尝试使用 JSON.Net 序列化我的对象时遇到以下错误:

Error getting value from 'DefaultValue' on 'NHibernate.Type.DateTimeOffsetType'.

我的 NHibernate 映射中的所有属性都没有使用 DateTimeOffsetType,所以我怀疑 NHibernate 正在以某种方式代理我的对象的属性。

我的对象上有几个 Nullable DateTime 值,但对我当前的版本没有什么新意。

我应该在哪里寻找 NHibernate 尝试将该类型用于哪些属性?

我还可能缺少什么?当我尝试使用此代码进行序列化时出现错误:

 var converter = new IsoDateTimeConverter();
 x.Json = JsonConvert.SerializeObject(myObject, converter);

同样,该代码已经存在很长时间了,这只是新问题。

4

2 回答 2

2

也许不是您一直在寻找的解决方案,但仍然是一个解决方案 - 我遇到了类似的事情。就我而言,我忘记了从 Web api 调用返回我的 DTO,而默认的 json 序列化程序开始执行此操作。

现在,我将我的数据对象映射到具有数据协定属性的 DTO 对象,并对其进行序列化。由于我的 DTO 很简单并且没有获得 NHibernate Proxified,因此这个错误似乎不再发生。

否则-我已经为其他可空日期执行此操作-我希望对序列化进行更多控制。为它定义一个自定义转换器并按照你的意愿做,但是对于这个 Nhibernate 类型。我宁愿根本不序列化(或尝试)这些代理类型。

于 2013-06-26T17:51:12.270 回答
-1

了解哪些属性具有 datetimeoffset 作为类型

var propertiesWithDateTimeOffset = nhConfiguration.ClassMappings
    .SelectMany(c => c.PropertyClosureIterator)
    .Where(p => p.Type is DateTimeOffsetType)
    .Select(p => p.PersistentClass.ClassName + "." + p.Name);

注意:代码尚未处理组件,但很容易添加

于 2013-03-27T09:49:35.667 回答