Как я могу превратить прокси-объекты, чтобы сериализовать их в Json? - PullRequest
0 голосов
/ 16 марта 2012

Я хочу сериализовать некоторые объекты в Json. Иногда (не всегда, и я не знаю, что его вызывает) один из этих объектов - это прокси, который заставляет сериализатор выдавать ошибку циклической ссылки, даже если нет циклической ссылки: «Циклическая ссылка была обнаружена при сериализации объект типа 'System.Reflection.RuntimeModule'. "

Мой код использует NHibernate и JavaScriptSerializer:

public static string Convert(object xiObject)
{
  var lSerialiser = new JavaScriptSerializer();

  return lSerialiser.Serialize(xiObject);
}

Ленивая загрузка предположительно выключена, как в:

  HasManyToMany(x => x.Managers)
    .Not.LazyLoad();

Звучит очень похоже на проблему этого парня: http://markmail.org/message/x5a2k7j7qtjmj73g#query:+page:1+mid:4r5lcggmfrcq5tby+state:results

Так что я планирую использовать Json.net вместо JavaScriptSerializer и внедрить решение на этой странице, но это выглядит действительно сложно. Любые другие предложения будут хороши.

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

ИМХО, правильный ответ - "нет".
Ваши объекты (которые могут содержать прокси-серверы) принадлежат вашему бизнес-домену . Вы должны сериализовать DTO, которые содержат только то, что нужно вашему клиенту, и не более.
Айенде пишет об этом подробно .

P.S. Также рекомендуется, чтобы не устанавливал параметр lazy-load в ваших сопоставлениях, а вместо этого решал, стоит ли lazy-load или нет, основываясь на конкретном запросе, который вы выполняете. И снова Айенде объясняет .

0 голосов
/ 16 марта 2012

Вероятно, вы можете "снять с прокси" объект перед его сериализацией.В этой статье показано, как это сделать - Определение прокси-классов NHibernate

...