3

NHibernateを使用して、かなり長い間実行されているデータベース(SQL Server 2008 R2)からかなり複雑なオブジェクトをロードする既存のアプリケーションがあります。

今日、JSON.Netを使用してオブジェクトをシリアル化しようとすると、次のエラーが発生します。

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

NHibernateマッピングのどのプロパティもDateTimeOffsetTypeを使用していないため、NHibernateがオブジェクトのプロパティを何らかの形でプロキシしていると思われます。

オブジェクトにいくつかのNullableDateTime値がありますが、現在のリリースに新しいものはありません。

NHibernateがそのタイプを使用しようとしているプロパティをどこで調べればよいですか?

他に何が欠けている可能性がありますか?このコードを使用してシリアル化しようとすると、エラーが発生します。

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

繰り返しになりますが、そのコードはかなり前から存在しています。それは新しい問題です。

4

2 に答える 2

2

おそらくあなたが探していたであろう解決策ではありませんが、それでも解決策です-私は似たようなものに遭遇しました。私の場合、Web API呼び出しからDTOを返すのを忘れていましたが、デフォルトのjsonシリアライザーがこれを実行しました。

次に、データオブジェクトをデータコントラクト属性を持つDTOオブジェクトにマップし、それをシリアル化します。私のDTOは単純で、NHibernate Proxifiedを取得しないため、このエラーは発生しなくなったようです。

それ以外の場合-私は他のNullableDatesに対してこれを行いました-シリアル化をより細かく制御したい場合。そのためのカスタムコンバーターを定義し、必要に応じて実行しますが、この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 に答える