1

オブジェクトをシリアル化するためにを使用してBinaryFormatterいます。関連するリストにはさまざまなオブジェクトタイプがあります。すべてのオブジェクトを1つのファイルにシリアル化する「最良の」方法はありますが、逆シリアル化でそれらを分離することはできますか?現在、ファイル全体を逆シリアル化し、各オブジェクトの特定のフィールドをチェックして、逆シリアル化後にそれらを再追加する必要があるリストを確認しています。たとえば、すべてのフォード車には「FORD」フィールドがあり、トヨタには「TOYOTA」などがあります。逆シリアル化すると、オブジェクトを「foreach」し、「company」フィールドをチェックして、それらをに割り当てますList<Company>

これが最も効率的な方法かどうかはわかりません。助言がありますか?助けてくれてありがとう

4

3 に答える 3

3

これは簡単です...個々のアイテムをシリアル化する代わりに。各アイテムタイプのプロパティを持つ「親」クラスを作成するだけです。そして、その1つのオブジェクトをシリアル化できます。もう一方の端で逆シリアル化すると、すでに完全に整理されています。

于 2010-08-15T01:37:43.587 に答える
0

これをより効率的に行うことができる唯一の方法は、それらを異なるファイルにシリアル化することです(ドメインにとって意味のあるフィールド基準に基づいて)。特定の順序でファイルにシリアル化される保証はないため、とにかく逆シリアル化するときにファイル全体をメモリに読み込んで、フィールド値が現在のタイプのすべてのインスタンスを見つける必要があります。探している。

ファイルにシリアル化するための制約の範囲内で、あなたはすでに最善を尽くしていると思います。SQLiteをストレージメカニズムと見なしましたか?

于 2010-08-15T01:38:50.900 に答える
0

あなたがしていることは辞書のように聞こえます(Dictionary<string, List<Company>>)。ただし、質問にはいくつかのソースコードを入力してください。

辞書をシリアル化する組み込みの方法はありませんが、独自のカスタムクラスを作成できます。私はそれをグーグルするための練習としてあなたに任せます:)

同じ方法でシリアル化を続行したいが、オブジェクト内にある既知のメンバーで分離したい場合(およびメンバーは常に同じである場合)、LINQクエリを使用して短いコードでオブジェクトを抽出できます。

IEnumerable<Company> companiesFromFile = GetDeserializedFile();
var dictionaryFromFile = companiesFromFile.ToDictionary(c => c.Name);

次に、リストを分離する必要がある場合は、次の方法で行うことができます。

List<Company> toyotaList = dictionaryFromFile["Toyota"];
// etc
于 2010-08-15T01:56:34.643 に答える