我正在尝试序列化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?

最佳答案

我以前遇到过类似的事情。我首先想到的是继承DetachedCriteria的子类,以便您可以自己提供默认的构造函数。但是,在研究DetachedCriteria类之后,我认为这不起作用。原因是CriteriaImpl内部使用的DetachedCriteria类也缺少默认构造函数。

查看XmlSerializer,如果您的对象没有默认构造函数,它似乎将无法工作。

但是,我遇到了这篇文章:

How do I serialize an NHibernate DetachedCriteria object?

基于此,这可能会起作用(但是,我尚未对其进行测试):

// 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();

08-26 16:36