Сериализация XML-фрагмента на языке Си#
Мне нужен способ сериализации универсальных объектов в XML-фрагменты.
Фрагменты будут вставлены в другие XML-документы, и поэтому мне нужен результат, который будет выглядеть примерно так:
<firstProperty>firstPropertyValue</firstProperty> <secondProperty>secondPropertyValue</secondProperty>
в отличие от:
<className xlmns="Whatever"> <firstProperty>firstPropertyValue</firstProperty> <secondProperty>secondPropertyValue</secondProperty> </className>
Мой код выглядит примерно так:
private static string GetRow<T>(object _data) { StringBuilder xml = new StringBuilder(); T data = (T)_data; XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; settings.ConformanceLevel = ConformanceLevel.Fragment; XmlSerializer serialiser = new XmlSerializer(typeof(T)); XmlWriter writer = XmlWriter.Create(xml, settings); serialiser.Serialize(writer, data, null); return xml.ToString(); }
Моя первая мысль состояла в том, что параметр OmitXmlDeclaration выполнит эту работу - это не так, если вы не установите ConformanceLevel на Fragment. Проблема в том, что как только я устанавливаю уровень соответствия, я получаю следующую ошибку времени выполнения:
"
Цитата:"WriteStartDocument не может быть вызван для писателей, созданных с помощью ConformanceLevel.Фрагмент."
Так что, похоже, что XmlSerializer.Serialize() вызывает WriteStartDocument независимо от того, что уровень соответствия установлен на Fragment, а не Document.
Я подозреваю, что самый простой способ обойти это-написать свой собственный сериализатор, но мне было бы интересно узнать, есть ли на самом деле способ успешно создать фрагмент из класса XmlSerializer.