C #: Хранение объекта .Net в реестре - PullRequest
0 голосов
/ 01 апреля 2009

Можно ли сохранить объект реестра .Net в реестре?

Я хочу сохранить универсальный List<> в реестре, а затем извлечь его и проанализировать обратно в список.

Возможно ли это, или мне нужно вручную сериализовать его и затем десериализовать обратно?

[UPDATE]

После опубликованных ответов я собираюсь сериализовать объект и сохранить его в папке Текущий пользователь AppData .

Ответы [ 8 ]

7 голосов
/ 01 апреля 2009

Это возможно , , если тип, включенный в список, является сериализуемым. Если это так, вы можете просто сериализовать его и сохранить в виде строкового значения.

Но это, наверное, очень плохая идея . Реестр становится достаточно большим, как есть. Вместо этого поместите подобные вещи в файловую систему , в папку «Все данные приложения пользователя».

6 голосов
/ 01 апреля 2009

Почему в реестре?

Подходящее место для хранения таких сериализованных объектов обычно находится в папке Application Data пользователя или Isolated Storage . Хотя, конечно, метод сериализации зависит от вас. XML, двоичный файл и т. Д., По сути, это файл на диске.

Вы можете рассмотреть такие вещи, как «Локальная база данных» или SQL Server Express, в зависимости от ваших данных и потребностей параллелизма.

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

2 голосов
/ 01 апреля 2009

Да, я думаю, вам придется сериализовать и десериализовать его самостоятельно. Но вы можете хранить его как двоичный блок или текст / xml. Возможно, существует ограничение на размер данных реестра ...

Большой вопрос - это хорошо, что делать?

1 голос
/ 01 апреля 2009

Сначала скажу: это звучит как очень плохая идея.

Если вы настаиваете на этом, вам придется сначала его сериализовать. Реестр не поддерживает вставку объектов .NET.

1 голос
/ 01 апреля 2009

Вам придется сериализовать его самостоятельно. Помните, что могут быть ограничения на объем данных, которые вы можете хранить, в зависимости от версии Windows.

http://msdn.microsoft.com/en-us/library/ms724872(VS.85).aspx

0 голосов
/ 01 апреля 2009

Не совсем уверен, почему вы хотите хранить объекты .NET в реестре, поскольку в BCL уже есть функционал, позволяющий вам делать это с файлами конфигурации XML ... но, говоря это, это, конечно, возможно хранить .NET объекты в реестре. Возможно, вы захотите сделать это, только если размер объекта будет относительно небольшим, но в любом случае это не должно быть проблемой. Я предполагаю, что очевидный способ сделать это - использовать XML Serialization (без форматирования / пробелов) и сохранить объект как сериализованное строковое значение.

0 голосов
/ 01 апреля 2009

Вам потребуется вручную сериализовать его.

0 голосов
/ 01 апреля 2009

Вы бы должны его сериализовать. В реестре хранятся только примитивные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...