2012-04-03 4 views
2

Ich muss eine Lucene.net-Dokument-Instanz serialisieren. Wenn ich versuche, die folgendeLucene.net-Dokument serialisieren

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; 
    } 

erhalte ich eine Ausnahme, weil die Lucene Feldtyp nicht einen parameterlosen Konstruktor haben.

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

Irgendwo in der Nähe? Gibt es eine allgemein akzeptierte Möglichkeit, ein Lucene.Net-Dokument zu serialisieren?

Antwort

2

Auch wenn Sie könnten, würde es Ihnen nicht viel helfen, da Document 's alle Mitglieder sind Java-Stil getXXX/setXXX-Methoden (keine Eigenschaften oder Felder). Der einfachste Weg wäre, Feld/Wert-Paare selbst zu bilden und sie dann zu serialisieren.

Zum Beispiel können Sie & serialize MyDocument Klasse

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

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

So füllen, wenn Sie ein Dokument serialisiert werden würden, so dass es von einem anderen Prozess indiziert werden, wie würden Sie nehmen? – Dzejms

+1

@Dzejms Dokument nicht serialisieren, Ihre Daten in einem anderen Format serialisieren (KeyValuePair, Ihre benutzerdefinierte Klasse usw.). Der Indexer-Prozess kann diese Daten lesen, das Dokument bilden und indizieren. –