Сериализация DetachedCriteria с nHibernate - PullRequest
3 голосов
/ 27 апреля 2009

Я пытаюсь сериализовать DetachedCriteria, чтобы я мог сохранить его в базе данных и использовать те же критерии позже. Когда я запускаю код ниже, я получаю «NHibernate.Criterion.DetachedCriteria не может быть сериализован, потому что у него нет конструктора без параметров».

DetachedCriteria criteria1 = DetachedCriteria.For<SecurityObjectDTO>("so")
    .Add(Expression.Eq("ObjectCode", "1234"));

XmlSerializer s = new XmlSerializer(typeof(DetachedCriteria));
TextWriter writer = new StringWriter();
s.Serialize(writer, criteria1);
writer.Close();

Есть ли хороший способ сериализации DetachedCriteria?

1 Ответ

1 голос
/ 09 декабря 2009

Я сталкивался с чем-то похожим раньше. Моей первой мыслью было создание подкласса DetachedCriteria, чтобы вы могли сами предоставить конструктор по умолчанию. Тем не менее, после изучения класса DetachedCriteria я не думаю, что это сработает. Причина в том, что класс CriteriaImpl, используемый внутри DetachedCriteria, также не имеет конструктора по умолчанию.

Глядя на XmlSerializer, не похоже, что он будет работать, если у вашего объекта нет конструктора по умолчанию.

Я наткнулся на этот пост, однако:

Как сериализовать объект NHibernate DetachedCriteria?

Исходя из этого, это может сработать (однако я не проверял):

// Convert the DetachedCriteria to a byte array
MemoryStream ms = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, detachedCriteria);

// Serialize the byte array
XmlSerializer s = new XmlSerializer(typeof(byte[]));
TextWriter writer = new StringWriter();
s.Serialize(writer, ms.Buffer);
writer.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...