0

NHibernate を使用して ASP.NET (2.0、いいえ、変更できません) サイトを構築しており、カスタム JSON コンバーターを使用しているため、クライアントから隠したいプロパティをシリアル化できません。これにより、オブジェクトを返すだけで、シリアル化された値について心配する必要がなくなります。オブジェクトは常に安全です。

残念ながら、 を使用するquery.FutureValue<class>()と、シリアル化されるオブジェクトは最初NHibernate.Impl.FutureValue<class>にエンティティであり、エンティティではないように見えます。つまり、辞書にスローしてクライアントに返すと、次のような JSON が得られます。

{key: { Value: { /* my serialized object properties */ } }

以前に、ASP の JavaScriptConverter 実装で動作するインターフェイスを取得できないことを発見しました...通常のクラスまたは抽象クラスのみです。したがって、サポートされている型として返さtypeof(IFutureValue<MyBaseClass>)れるということは、私のコンバーターが完全に無視されることを意味します。以前にインターフェースではなく抽象ベースを使用するようにリファクタリングしたため、MyBaseClass をキャッチできます。

そして、.Impl の FutureValue の実装がアセンブリの内部にあること、または .NET の経験をさらに苦痛にするだけの他のナンセンスであることを発見しました。typeof(FutureValue<MyBaseClass>)FutureValue は私のデバッグ セッションにのみ存在するため、すべてを処理するために使用することはできません。

アセンブリからクラス型を取得する方法はありますか? または、インターフェイスに実際に用途があることを ASP に納得させる方法はありますか? それとも、問題全体を回避できるようにアクセスできるスーパークラスがあるのでしょうか?

ヘルプ!Futures が気に入っています。一度に大量のコールをバッチ処理できます。

(不明な点がある場合、またはさらにコードが必要な場合は、ぜひお問い合わせください。かなりの量を投稿できます。)

4

1 に答える 1

0

私があなたのことを正しく理解していれば、あなたは物事を少し混ぜ合わせているように見えます。

のインスタンスをシリアル化しようとしているように思えますが、当然のことながら、フィールドにエンティティを表す JSONquery.FutureValue<class>()が含まれる JSON オブジェクトが得られます。Value

私には、あなたが本当にシリアライズしたいように思えますquery.FutureValue<class>().Value

ただし、このように NHibernate の先物を使用してもほとんどメリットがないため、おそらく次のようなものを求めています。

var future1 = query1.FutureValue<SomeEntity>();
var future2 = query2.FutureValue<AnotherEntity>();

var json1 = serializer.Serialize(future1.Value); //<BAM! Multi-query gets fired!
var json2 = serializer.Serialize(future2.Value);

それは理にかなっていますか?

于 2011-03-16T22:59:49.810 に答える