2013-03-25 61 views
2

我有一個現有的應用程序使用NHibernate從一個已經運行了一段時間的數據庫(SQL Server 2008 R2)加載一些相當複雜的對象。NHibernate DateTimeOffsetType代理源?

今天,我試圖用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); 

此外,該代碼已實行了一段時間,它只是爲新的問題:當我嘗試使用此代碼序列化的錯誤出現。

回答

1

不是真正的解決方案也許尋找,但解決方案 - 我遇到了類似的東西。 在我的情況下,我忘記了從web api調用返回我的DTO,而默認的json serialiser踢了這個。

現在我將我的數據對象映射到具有數據約定屬性的DTO對象,並將其序列化。 由於我的DTO很簡單,並且沒有得到NHibernate Proxified,所以這個錯誤似乎不再發生。

否則 - 我已經爲其他可空日期做了這個 - 我想要更多的控制序列化。爲它定義一個自定義轉換器並按照你的意願去做,但是對於這個Nhibernate類型。 我寧願不要序列化(或嘗試)這些代理類型。

-1

來了解哪些屬性已DATETIMEOFFSET類型

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

注:該代碼不處理部件還,但它會很容易地添加

你會一直