NHibernate DateTimeOffsetType proxy source?



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

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

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

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

在我的对象上有几个可空的DateTime值,但在当前版本中没有什么新内容。

我应该在哪里寻找找出NHibernate正在尝试使用该类型的属性?

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

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

同样,这些代码已经存在很长一段时间了,它只是一个新的问题。

可能不是您一直在寻找的解决方案,但仍然是一个解决方案-我遇到了类似的情况。在我的例子中,我忘记了从web api调用返回我的DTO,默认的json序列化器踢进来做了这件事。

现在我将我的数据对象映射到一个具有数据契约属性的DTO对象,并对其进行序列化。因为我的DTO很简单,没有得到NHibernate代理,这个错误似乎不再发生。

否则——我已经为其他Nullable date这样做了——我想对序列化有更多的控制。为它定义一个自定义转换器,并按照您的意愿进行操作,但仅限于此Nhibernate类型。我宁愿不序列化(或尝试)那些代理类型。

了解哪些属性的datetimeoffset类型为

var propertiesWithDateTimeOffset = nhConfiguration.ClassMappings
    .SelectMany(c => c.PropertyClosureIterator)
    .Where(p => p.Type is DateTimeOffsetType)
    .Select(p => p.PersistentClass.ClassName + "." + p.Name);
注意:代码还不能处理组件,但是很容易添加

相关内容

  • 没有找到相关文章

最新更新