Как найти позицию объекта в сериализованном общем списке

1

Поскольку я могу иметь прямой доступ к определенному объекту в сериализованном общем списке, мне нужно знать его положение из де-сериализованного потока.

private static void Serialze(object obj, FileStream Stream)
    {
        BinaryFormatter bin = new BinaryFormatter();
        bin.FilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Low;
        bin.Serialize(Stream, obj);
    }
private static object DeSerialize(FileStream Stream)
    {
        if (Stream.Position >= Stream.Length) return null;
        BinaryFormatter bin = new BinaryFormatter();
        bin.FilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Low;
        object x = bin.Deserialize(Stream);
        return x;
    }

Предположим, у меня есть общий список:

List<MyClass> L1=new List<MyClass>();

Как я могу найти позицию L1 [10] в моем FileStreem для ее использования в методе DeSerialize?

Теги:
serialization
filestream

1 ответ

2
Лучший ответ

Формат, используемый BinaryFormatter не доступен для поиска. Вы не можете извлекать под-объекты.

Вероятно, этот вопрос является примером XY-проблемы. Скажите нам, чего вы хотите достичь и зачем вам это нужно. Как уже было сказано, ответа нет.

Возможно, вы можете использовать базу данных. Или используйте протокольные буферы, которые являются более гибкими.

  • 0
    Мне это нужно, потому что мне нужно сохранить список объектов, и я подумал, что десериализовать весь список каждый раз, когда я ищу его объект, тяжело. Есть ли способ, кроме как сохранить каждый объект отдельно в файле?
  • 0
    Много стратегий. Вы можете начать файл с «массива» всех смещений в файле, где расположены объекты. Или вы можете использовать один файл для каждого объекта. Или вы узнаете, имеет ли значение разница в производительности. Возможно, вы можете просто десериализовать весь файл.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню