2012-04-03 8 views
2

Lucene.net Documentインスタンスをシリアル化する必要があります。私は、次の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メソッド(プロパティまたはフィールドではありません)なので、あまり役に立ちません。最も簡単な方法は、フィールド/値のペアを自分で作成してからシリアル化することです。例えば

、あなたはそれが別のプロセスによってインデックス化できるように、ドキュメントをシリアル化するつもりだったならば、あなたはどのようなアプローチを取るので&シリアル化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

+1

@Dzejmsドキュメントをシリアル化したり、別のフォーマット(KeyValuePair、カスタムクラスなど)でデータをシリアル化したりしないでください。インデクサープロセスは、このデータを読み取り、文書を形成し、それを索引付けすることができる。 –

関連する問題