NHibernate.IFutureValue <> при сериализации включает в себя .Value - PullRequest
0 голосов
/ 16 марта 2011

Я создаю сайт ASP.NET (2.0, нет, я не могу его изменить) с помощью NHibernate, и у меня есть специальный конвертер JSON, поэтому я не могу сериализовать свойства, которые я хочу скрыть от клиента.Это позволяет мне просто возвращать объекты и никогда не беспокоиться об их сериализованных значениях - они всегда безопасны.

К сожалению, получается, что если я использую query.FutureValue<class>(), то объект, который сериализуется, будет первымNHibernate.Impl.FutureValue<class>, а не моя сущность, что означает, что я получаю JSON, который выглядит следующим образом, если я добавляю его в словарь и возвращаю его клиенту:

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

Ранее я обнаружил, что не могу получить какой-либоинтерфейсы для работы в реализации JavaScriptConverter ASP ... только регулярные или абстрактные классы.Поэтому возвращение typeof(IFutureValue<MyBaseClass>) в качестве поддерживаемого типа означает, что мой конвертер полностью игнорируется.Я могу поймать MyBaseClass, потому что я реорганизовал вещи раньше, чтобы использовать абстрактную базу вместо интерфейса, но не интерфейса.

И затем я обнаружил, что реализация FutureValue в .Impl является внутренней по отношению к сборке или какой-то другой.другая такая ерунда, которая только делает мой опыт .NET еще более болезненным.Поэтому я не могу использовать typeof(FutureValue<MyBaseClass>) для обработки всего этого, потому что FutureValue существует только в моих сеансах отладки.

Есть ли способ получить тип класса из сборки?Или способ убедить ASP, что интерфейсы действительно используются?Или может быть какой-нибудь суперкласс, к которому я могу получить доступ, позволил бы мне обойти всю проблему?

Помогите!Мне нравится мой Futures, он позволяет мне пакетировать целую кучу звонков одновременно!

(если что-то не понятно или вы хотите больше кода, непременно спросите! Я могу опубликовать довольнонемного.)

1 Ответ

0 голосов
/ 17 марта 2011

Если я правильно вас понимаю, кажется, вы немного смешиваете все вместе.

Звучит так, как будто вы пытаетесь сериализовать экземпляр 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);

Имеет ли это смысл?

...