简体   繁体   English

使用nHibernate序列化DetachedCriteria

[英]Serialize DetachedCriteria with nHibernate

I am trying to serialize a DetachedCriteria so I can save it in a database and reuse the same criteria at a later date. 我正在尝试序列化DetachedCriteria,以便将其保存在数据库中,并在以后重用相同的条件。 When I run the code below I get "NHibernate.Criterion.DetachedCriteria cannot be serialized because it does not have a parameterless constructor". 当我运行下面的代码时,我得到“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();

Is there any good way to serialize a DetachedCriteria? 有没有什么好方法可以序列化DetachedCriteria?

I've run into something similar before. 我之前遇到过类似的事情。 My first thought was to subclass DetachedCriteria so you could provide a default constructor yourself. 我的第一个想法是将DetachedCriteria子类化,因此您可以自己提供默认构造函数。 However, after digging through the DetachedCriteria class, I don't think this will work. 但是,在挖掘DetachedCriteria类之后,我认为这不会起作用。 The reason is the CriteriaImpl class, used internally by DetachedCriteria , is also lacking a default constructor. 原因是DetachedCriteria内部使用的CriteriaImpl类也缺少默认构造函数。

Looking at XmlSerializer, it doesn't look like it will work if your object doesn't have a default constructor. 查看XmlSerializer,如果您的对象没有默认构造函数,它看起来不会起作用。

I ran into this post, however: 然而,我遇到了这篇文章:

How do I serialize an NHibernate DetachedCriteria object? 如何序列化NHibernate DetachedCriteria对象?

Based on that, this might work (I haven't tested it, however): 基于此,这可能有用(但我没有测试过):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM