2012-04-03 58 views
2

我需要序列化一個Lucene.net文檔實例。當我嘗試以下操作時序列化Lucene.net文檔

public bool Serialize(Document doc) 
    { 
     XmlSerializer serializer = new XmlSerializer(doc.GetType()); 
     TextWriter writer = new StreamWriter(Path.Combine(_indexPath, String.Format("{0}{1}",Guid.NewGuid().ToString(), ".xml"))); 
     serializer.Serialize(writer, doc); 
     writer.Close(); 
     return true; 
    } 

我收到一個異常,因爲Lucene字段類型沒有無參數構造函數。

"Lucene.Net.Documents.Field cannot be serialized because it does not have a parameterless constructor." 

任何方法?是否有一種更普遍接受的序列化Lucene.Net文檔的方式?

回答

2

即使你可以,它也不會幫你什麼,因爲Document的所有成員都是java風格的getXXX/setXXX方法(不是屬性或字段)。最簡單的方法是自己形成Field/Value對,然後序列化它們。

例如,您可以填寫&連載MyDocument

public class MyDocument 
{ 
    public List<MyField> Fields; 
} 

public class MyField 
{ 
    public string Field; 
    public string Text; 
    public bool Indexed; 
    public bool Stored; 
} 
+0

所以,如果你要序列化文檔,因此它可以被其他進程進行索引,你會採取什麼辦法? – Dzejms 2012-04-03 18:00:25

+1

@Dzejms不要序列化文檔,以另一種格式(KeyValuePair,您的自定義類等)序列化數據。索引器進程可以讀取這些數據,形成文檔並對其進行索引。 – 2012-04-03 18:04:01