Сериализация различных типов в один файл - PullRequest
1 голос
/ 15 августа 2010

Я использую BinaryFormatter для сериализации моего объекта. У меня есть различные типы объектов в соответствующих списках. Есть ли «лучший» способ сериализации всех объектов в один файл, но можно ли разделить их при десериализации? На данный момент я десериализирую весь файл и проверяю определенное поле в каждом объекте, чтобы увидеть, к какому списку я должен добавить их после десериализации. Например, у всех моих автомобилей Ford есть поле «FORD», у Toyota - «TOYOTA» и т.д. *

Я не уверен, что это самый эффективный способ ведения дел. Какие-либо предложения? Спасибо за помощь

Ответы [ 3 ]

3 голосов
/ 15 августа 2010

Это легко ... вместо сериализации каждого отдельного элемента. Просто создайте «родительский» класс, который просто имеет свойство для каждого типа элемента. И тогда вы можете сериализовать этот один объект. Когда вы десериализуете его на другом конце, он уже будет полностью у вас разбираться.

0 голосов
/ 15 августа 2010

То, что вы делаете, звучит как словарь (Dictionary<string, List<Company>>). Пожалуйста, предоставьте некоторый исходный код в вашем вопросе.

Нет встроенного способа сериализации словаря, но вы можете создать свой собственный класс. Я оставлю это в качестве упражнения для Google, чтобы:)

Если вы хотите продолжить сериализацию таким же образом, но отделить от известного члена, который находится внутри объектов (и член всегда один и тот же), вы можете использовать запрос LINQ для извлечения объектов с коротким кодом:

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

Затем, если вам нужно разделить списки, вы можете сделать это через:

List<Company> toyotaList = dictionaryFromFile["Toyota"];
// etc
0 голосов
/ 15 августа 2010

Единственный способ сделать это более эффективно - это сериализовать их в разные файлы (основываясь на критериях поля, которые имеют смысл для вашего домена). Поскольку вам не гарантируется, что они будут сериализованы в файл в определенном порядке, вам придется считывать весь файл в память при десериализации в любом случае, чтобы найти все экземпляры типа, где значение поля соответствует вашему. ищу.

Я думаю, что вы уже делаете все возможное в рамках ограничений для сериализации в файл. Вы рассматривали SQLite как свой механизм хранения?

...