私は自然言語処理コードをいくつか書いており、単語の意味を調べるためのバイナリ形式の辞書を用意したいと考えています。私はもともと標準のシリアライゼーションとバイナリフォーマッタの仕組みを使っていましたが、結果として得られるファイルの大きさと(冗長な)タイプ情報がどれくらいいっぱいであるかを驚かせました。私はprotobuf-netライブラリを私のために働かせようとしていましたが、次の問題があります:protobuf-netクラスを逆シリアル化するリスト<T>プロパティ/メンバー
辞書にファイルを書き込むと、インデックスファイルにレコードが始まるというオフセットがあります。シリアライゼーションはうまくいきますが、エントリを見ると正しいオフセットが得られますが、DictionaryEntryのDefinitionsプロパティにはDictionaryDefinitionsがすべて含まれています(何千ものもの)。リスト内の最初のDictionaryDefinitionは、検索された用語の正しいDictionaryDefinitionです。
私はこれを、プロパティとしてもパブリックメンバーとしても、成功しないように実装しようとしました。 ProtoContember属性ではSkipConstructor = true、ProtoMember属性ではOverwriteList = trueを試してみました。
[ProtoContract]
public class DictionaryEntry
{
[ProtoMember(1)]
public string EntryKey { get; set; }
[ProtoMember(2)]
public List<DictionaryDefinition> Definitions{ get; set; }
}
[ProtoContract]
public class DictionaryDefinition
{
[ProtoMember(1)]
public string PartOfSpeech { get; set; }
[ProtoMember(2)]
public string Definition { get; set; }
}
私は自分のコードの残りの部分で特にダム何かをやったとは思わないが、誰もが、この部分のために何を示唆することができれば、私はこれを除外したいと思います。
おかげで、
M
分割する必要がある既存のデータがある場合は、おそらくそれを助けることができます。オフセットがある場合はおそらくその必要はありません –
実際には、技術的には、 *オフセットデータを使用して、手動で長さを指定できるオーバーロードを使用して既存のデータを逆シリアル化してください –