0

我正在使用 NHibernate 构建一个 ASP.NET(2.0,不,我不能更改它)站点,并且有一个自定义 JSON 转换器,所以我不能序列化我想从客户端隐藏的属性。这让我只需返回对象,而不必担心它们的序列化值——它们总是安全的。

不幸的是,如果我使用query.FutureValue<class>(),被序列化的对象首先是 theNHibernate.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

如果我对您的理解正确,那么您似乎正在将一些事情混合在一起。

听起来您正在尝试序列化 的实例query.FutureValue<class>(),不出所料,这给了您:一个 JSON 对象,其中Value字段具有代表您的实体的 JSON。

对我来说,听起来你真的只想序列化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 回答