2011-09-28 5 views
1

Я хочу сериализовать объект, где некоторые из переменных-членов имеют тип string и имеют значение null. Я использую следующий код:XmlTextWriter и нулевые строки

 var writer = new XmlTextWriter(stream, Encoding.UTF8); 
     writer.Formatting = Formatting.Indented; 

     var s = new XmlSerializer(typeof(model.GetType()));    
     s.Serialize(writer, model); 

Строки со значением null не появляются в файле XML (который, очевидно, предназначенный поведение), хотя я не хочу этого. Как я могу сделать строки null в файле Xml, переопределяя класс XmlTextWriter?

EDIT: Я не могу изменить объектную модель, которая должна быть сериализована, поэтому атрибуты Xml не являются параметрами.

ответ

1

Вы могли бы использовать:

[XmlElement(IsNullable = true)] 

любого члена вы хотите быть записана в файл, даже если нуль.

+0

спасибо за ваш ответ. Я не могу изменить объектную модель, поэтому я не могу использовать это решение. Я редактировал свой вопрос, чтобы включить это ограничение. – thumbmunkeys

+0

@ x0r: цикличность по вашей коллекции объектов и замена нулевых элементов на String.Empty не является решением, верно? – Marco

+0

это было бы решением! хотя это не совокупность объектов, а больше дерева объектов. поэтому вам нужно будет использовать отражение, чтобы пройти дерево, пройти через все переменные-члены и установить эти строки «null». – thumbmunkeys

1

вы можете использовать этот атрибут на вас член:

[XmlElement(IsNullable = true)] 

будет установлен атрибут на вашем элемента с указанием, что он является недействительным, а не не сериализации.

0

Я предлагаю клонировать объект ObjektModleTree и заменять строку «null» пустыми.

Наследовать XmlSerializer в новом классе и клонировать ObjectModelTree без «нулевых» строк. Итак, если вы можете изменить ObjektModel, вы можете удалить свой собственный Serializer и использовать .NET Serializer для выполнения этой работы.

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