2009-04-27 3 views
3

데이터베이스에 저장하고 나중에 동일한 기준을 다시 사용할 수 있도록 DetachedCriteria를 직렬화하려고합니다. 아래의 코드를 실행하면 "NHibernate.Criterion.DetachedCriteria는 매개 변수없는 생성자가 없으므로 직렬화 할 수 없습니다."라는 메시지가 나타납니다.nHibernate를 사용하여 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를 직렬화하는 좋은 방법이 있습니까?

+0

가 왜 하시겠습니까 ? – Paco

+0

그래서 사용자는 나중에 재사용 할 수 있도록 데이터베이스에 저장할 수있는 기준을 만들 수 있습니다. – Craig

답변

1

전에 비슷한 문제가있었습니다. 내 생각은 DetachedCriteria 하위 클래스로 기본 생성자를 직접 제공 할 수 있습니다. 그러나, DetachedCriteria 클래스를 파기 한 후에는 이것이 작동하지 않을 것이라고 생각합니다. 그 이유는 내부적으로 DetachedCriteria으로 사용되는 CriteriaImpl 클래스는 기본 생성자가 부족하기 때문입니다.

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(); 
+2

제쳐두고, 나는 당신의 기준을 나타내는 또 다른 방법을 찾는 것에 대해 생각할 것입니다. 문자열 또는 XML 값으로 표현할 수 있다면 순차 화 프로세스를 크게 단순화 할 수 있습니다. – Doug

+0

DetachedCriteria로 deserialize하는 것은 어떻습니까? –

관련 문제