2015-11-26 3 views
1

У меня есть проект библиотеки, где объект сериализуется в формате XML для дальнейшей загрузки пользователями в приложении ASP.NET. Кроме того, я использовал XSD для генерации типов для сериализации. Количество типов для сериализации очень велико. Каждый тип сериализуется в собственный XML. Некоторые типы имеют свойства строки, иногда эти свойства содержат пустые строки. Во время сериализации этих свойства были сериализовать некоторые нравится этаНе сериализуйте пустые строки в XML

<propertyName /> 

Так это свойства становятся недействительными XSD (они не являются обязательными, но имеют некоторые ограничения, такие как строки минимальной длина строки и т.д.

Есть ли способ настройка XMLSerializer не не сериализовать пустые строки в пустые элементы XML для всех типов, которые были сериализовать.

для сериализации Я использую System.Xml.XmlSerializer.

ответ

0

Вы должны были бы внедрить xml writer/reader для сериализации для работы;

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

if(string.isNullOrEmpty(this.testString)){ 
break; // if in a loop of params, just giving an example, rest of the      
     // xmlwriter implementation would be normal 
     // note you might need to also implement the reader a bit different - unsure of that. 
} 

Справочный материал:

http://forum.codecall.net/topic/58239-c-tutorial-reading-and-writing-xml-files/ http://www.dotnetperls.com/xmlwriter

0

Я бы посоветовал вам вернуться и внимательно прочитать спецификацию XML. См http://www.w3.org/TR/REC-xml/#sec-starttags , где он говорит:

[Определение:. Элемент без содержимого называется пустым] Представление> пустой элемент является либо начальный тег сразу после конечного тега, или тег с пустыми элементами. [Определение: тег пустого элемента имеет специальный вид:]

Так что:

<propertyName /> 

в точности эквивалентно следующему:

<propertyName></propertyName> 

... и любой XML-процессор который рассматривает их по-разному, не соответствует спецификации.

Я считаю, что люди часто путают следующие понятия при работе с XML и XML-схемы:

  • тег с пустым содержимым.

Любая форма приемлема. Пусто - это не то же самое, что «null» или «nil». Элемент может быть пустым или нулевым, даже если minOccurs = 1 в схеме.

  • null value/nil value.

Не то же самое, что пустой контент.XML имеет определенный атрибут, указывающий, что значение равно «nil».

  • отсутствует бирка.

Тег полностью исключается из документа XML. Не то же самое, что пустое или пустое. Это будет вызвать ошибку проверки, если minOccurs = 1

+0

К сожалению, эти XSD были предоставлены сторонними разработчиками, и я не влиял на них. Поэтому я должен потреблять их «как есть». – Anton

+0

Но вы сказали, в своем первом сообщении Некоторые типы имеют свойства строки, иногда эти свойства содержат пустые строки. Во время сериализации этих свойства были сериализовать некоторые нравится эта <ИмениСвойство /> Так это свойства становятся недействительными XSD (они не являются обязательными, но имеют некоторые ограничения, такие как строки минимальной длина строки и т.д. Есть ли способ настроить XMLSerializer не сериализует пустые строки для пустых элементов xml для всех типов, которые были сериализованы. – kimbert

+0

... так что я несколько озадачен вашим реальным требованием. Можете ли вы попытаться более ясно объяснить проблему? – kimbert

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