Записи по умолчанию при первом создании для сериализованного класса - PullRequest
2 голосов
/ 26 марта 2010

У меня есть класс, который я использую для сериализации различных параметров конфигурации для приложения, над которым я работаю. Я добавляю новое свойство в класс, который является списком, и я бы хотел, чтобы он заполнил этот список, если он еще не существует в файле XML. Моей первой мыслью было проверить, содержит ли список ноль элементов, однако это неприемлемо, потому что бывают моменты, когда я хочу, чтобы в списке было ноль. По сути, я хочу, чтобы файл, который был сериализован с более старой версией того же класса, был «обновлен» и в него автоматически вставлялись значения по умолчанию для новых свойств. Как я могу это сделать? Более наглядный пример того, что я пытаюсь сделать, см. Ниже:

Когда я десериализирую XML-файл, который содержит:

<Item1>wtfe</Item1>
<Item2>wtfe</Item2>

и после того, как я добавлю свойство списка, оно будет сериализовано как:

<Item1>wtfe</Item1>
<Item2>wtfe</Item2>
<Item3/>

Я хочу, чтобы он сериализовался как:

<Item1>wtfe</Item1>
<Item2>wtfe</Item2>
<Item3>
   <DefaultSubItem/ Field="wtfe">
   <DefaultSubItem/ Field="wtfe">
</Item3>

Но позвольте мне изменить его на:

<Item1>wtfe</Item1>
<Item2>wtfe</Item2>
<Item3></Item3>

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Другим вариантом может быть использование этих атрибутов:

[OnSerializing ()]

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.onserializingattribute.aspx

[OnDeserializing ()]

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.ondeserializingattribute.aspx

0 голосов
/ 26 марта 2010

Я думаю, что вы ищете класс SerializationBinder:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationbinder%28VS.71%29.aspx

...