質問

私はaを使用しています BinaryFormatter 私のオブジェクトをシリアル化する。関連するリストにはさまざまなオブジェクトタイプがあります。すべてのオブジェクトを1つのファイルにシリアル化する「最良の」方法はありますか?現時点では、ファイル全体を降らせ、各オブジェクトの特定のフィールドをチェックして、脱出後にどのリストを再追加するかを確認しています。たとえば、すべてのフォード車には「フォード」フィールドがあり、トヨタには「トヨタ」などがあります。 List<Company>.

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

役に立ちましたか?

解決

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

他のヒント

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

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

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

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

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

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

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

List<Company> toyotaList = dictionaryFromFile["Toyota"];
// etc
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top