2011-09-28 58 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來完成這項工作。