2010-06-13 4 views
0

Прошу прощения за вопрос, который, вероятно, был задан сотни раз раньше, но я, похоже, не могу найти ответ в архивах; вероятно, потому, что мой вопрос слишком прост.Обобщенная сериализация XML

Я знаю, что XML Serialization по умолчанию касается только публичных элементов и свойств. Свойства очень часто маскируют закрытую переменную; особенно если они только на чтение. Сериализация их в порядке; значение, которое экземпляр предоставляет миру, - это то, что входит в XML. Но если десериализация одних и тех же данных не может вернуть значение туда, где оно принадлежит, в чем смысл этого? Есть ли что-то, что мне не хватает в том, как XML-сериализация обычно используется для классов с свойствами маскировки? Конечно, не может быть, что единственный ответ явно реализует Read/WriteXML - потому что это больше усилий, чем того стоит!

ответ

3

Вы правы, но я думаю, что вы потеряли обзор по всем последствиям. ;-) Если вы явно определяете, что свойство не может быть написано, очевидно, что вы не можете десериализовать его. По крайней мере, не по умолчанию. У вас есть другие варианты для решения этой проблемы:

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

  • В большинстве случаев, когда собственность действительно должна быть только на чтение, в случае вычисленных свойств. Но их вообще не нужно сериализовать. Поэтому отметьте их XmlIgnore, и все готово.

  • Вы можете передать переопределения XmlSerializer. Не знаю из головы, насколько они сильны, но вы можете посмотреть документацию. Обычно они используются для изменения поведения сериализации типов, которые вы не можете изменить (т. Е. Не можете добавлять атрибуты).

  • Если вышеуказанные решения не работают, возможно, вам придется реализовать Read/WriteXml.

+0

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

Смежные вопросы