Что определяет, является ли поле пользовательского типа CLR сериализуемым XML? - PullRequest
1 голос
/ 23 августа 2011

В качестве одного из моих первых проектов .NET я пытаюсь создать пользовательский тип CLR для использования в SQL Server. В Требованиях библиотеки MSDN для реализации UDT написано:

UDT должен реализовывать System.Xml.Serialization.IXmlSerializable, или все открытые поля и свойства должны относиться к сериализуемым XML-типам или иметь атрибут XmlIgnore, если требуется переопределение стандартной сериализации.

Какое правило определяет, являются ли мои поля и свойства сериализуемыми в XML (с использованием стандартной сериализации XML)? Для каких типов требуется настраиваемая XML-сериализация?

Редактировать: В конечном счете, я хочу знать, должен ли я реализовать интерфейс IXmlSerializable. Похоже, у меня есть выбор: реализовать это или ограничиться членами класса / структуры, которые SQL Server CLR может обрабатывать автоматически.

Ответы [ 3 ]

0 голосов
/ 26 августа 2011

Любой тип по умолчанию считается XmlSerializable. Вам не нужно добавлять ничего особенного. Вам просто нужно соблюдать некоторые правила:

  1. Ваш тип должен определять конструктор по умолчанию.
  2. Вы не должны использовать определенный объект, который нельзя сериализовать в XML (например, объекты, производные от IDictionary.
  3. Если вам нужно разместить свойства только для чтения или свойства типов, которые не поддерживаются сериализацией XML, вы должны пометить их атрибутами [XmlIgnore], чтобы они не были сериализованы.

Если вы хотите больше контроля над тем, как сериализуется ваш класс (например, предоставить специальные имена для узлов, контролировать, сериализуются ли свойства ваших классов как узлы или атрибуты и т. Д.), Тогда вам следует взглянуть на эти атрибуты http://msdn.microsoft.com/en-us/library/83y7df3e.aspx

0 голосов
/ 28 августа 2011

Из " Представляем сериализацию XML ":

Элементы, которые можно сериализовать

Следующие элементы могут быть сериализованы с использованием класса XmLSerializer:

  • Открытые свойства чтения и записи и поля открытых классов.

  • Классы, которые реализуют ICollection или IEnumerable.

    Примечание: Сериализуются только коллекции, а не общедоступные свойства.

  • Объекты XmlElement.

  • Объекты XmlNode.

  • Объекты DataSet.

0 голосов
/ 24 августа 2011

Примитивные типы .Net, такие как string, DateTime, int, boolean и т. Д., Могут быть XmlSerializable, если свойство вашего пользовательского типа f.i. MyClass этот тип должен быть сериализуемым, помеченным атрибутами сериализации

...