使用nHibernate序列化DetachedCriteria [英] Serialize DetachedCriteria with nHibernate

查看:90
本文介绍了使用nHibernate序列化DetachedCriteria的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试序列化DetachedCriteria,以便可以将其保存在数据库中,并在以后再次使用相同的条件.当我运行下面的代码时,我得到"NHibernate.Criterion.DetachedCriteria无法序列化,因为它没有无参数的构造函数".

I am trying to serialize a DetachedCriteria so I can save it in a database and reuse the same criteria at a later date. When I run the code below I get "NHibernate.Criterion.DetachedCriteria cannot be serialized because it does not have a parameterless constructor".

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?

Is there any good way to serialize a DetachedCriteria?

推荐答案

我之前遇到过类似的情况.我的第一个想法是子类,因此您可以自己提供一个默认构造函数.但是,在深入研究DetachedCriteria类之后,我认为这不起作用.原因是DetachedCriteria在内部使用的CriteriaImpl类也缺少默认的构造函数.

I've run into something similar before. My first thought was to subclass DetachedCriteria so you could provide a default constructor yourself. However, after digging through the DetachedCriteria class, I don't think this will work. The reason is the CriteriaImpl class, used internally by DetachedCriteria, is also lacking a default constructor.

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

Looking at XmlSerializer, it doesn't look like it will work if your object doesn't have a default constructor.

我遇到了这篇文章,

如何序列化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();

这篇关于使用nHibernate序列化DetachedCriteria的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆