Обобщенная XML-сериализация - PullRequest
0 голосов
/ 13 июня 2010

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

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

1 Ответ

3 голосов
/ 13 июня 2010

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

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

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

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

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

...