Ich schreibe einige Natural Language Processing-Code und möchte ein Wörterbuch im Binärformat haben, um Wortbedeutungen zu suchen. Ich verwendete ursprünglich den Standard-Serialisierungs- und Binärformat-Mechanismus, war aber entsetzt darüber, wie groß die resultierende Datei war und wie voll mit (redundanten) Informationen. Ich habe versucht, die protobuf-net-Bibliothek für mich arbeiten zu lassen, aber habe das folgende Problem:Deserializing protobuf-net-Klassen Liste <T> Eigenschaft/Member
Wenn ich mein Wörterbuch in Datei schreibe, stelle ich auch den Offset, dass ein Datensatz in eine Indexdatei startet, und ich denke, dass die Serialisierung funktioniert OK, aber wenn ich einen Eintrag nach oben schaue, bekomme ich den korrekten Offset, aber die Definitions-Eigenschaft des DictionaryEntry enthält von da an alle DictionaryDefinitions (Tausende von ihnen). Die erste DictionaryDefinition in der Liste ist die richtige für den gesuchten Begriff.
Ich habe versucht, dies als ein Eigentum und als ein öffentliches Mitglied, um keinen Erfolg zu implementieren. Ich habe auch SkipConstructor = true im ProtoContract-Attribut und OverwriteList = true im ProtoMember-Attribut versucht.
[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; }
}
Ich glaube nicht, dass ich irgendetwas besonders stumm in den Rest meines Code getan haben, aber wenn jemand etwas für diesen Teil vorschlagen könnte, würde Ich mag diese auszuschließen.
Danke,
M
Ich hätte auch hinzugefügt: Wenn Sie vorhandene Daten haben, die Sie teilen müssen, kann ich wahrscheinlich dabei helfen - obwohl vermutlich, wenn Sie die Offsets haben, die Sie nicht benötigen –
Eigentlich könnten Sie technisch auch die Länge berechnen * Verwenden * Ihrer Offset-Daten und Deserialisieren der vorhandenen Daten mit den Überladungen, die Sie die Länge manuell liefern können –