2011-09-28 57 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文件(这显然是预期的行为),虽然我不希望出现这种情况。 如何通过覆盖XmlTextWriter类来使null字符串出现在Xml文件中?

编辑:我不能修改需要序列化的对象模型,所以Xml属性是没有选择。

回答

1

你可以使用:

[XmlElement(IsNullable = true)] 

任何成员你想即使NULL被写在文件中。

+0

感谢您的回答。我无法修改对象模型,因此我无法使用此解决方案。我编辑了我的问题来包含这个约束。 – thumbmunkeys

+0

@ x0r:在你的对象集合上循环并用String.Empty替换null项不是解决方案,对吧? – Marco

+0

这将是一个解决方案!尽管它不是一个对象集合,而是一个对象树。因此您需要使用反射来遍历树,遍历所有成员变量并设置这些“空”字符串。 – thumbmunkeys

1

您可以在成员上使用这个属性:

[XmlElement(IsNullable = true)] 

将你的元素上设置的属性指定它是空的,而不是不其序列。

0

我建议克隆ObjektModleTree并用空的替换“null”字符串。

在新类中继承XmlSerializer并克隆ObjectModelTree而不使用“空”字符串。 所以,如果你能够改变ObjektModel,你可以删除你自己的Serializer并使用.NET Serializer来完成这项工作。