使用C#中的换行符对XML元素进行XML反序列化

我似乎无法弄清楚为什么这个测试没有通过

测试是:

给出以下XML:

   1234567890   ABCXYZ   

和以下课程:

 class Foo { [XmlElement(ElementName = "account", DataType = "normalizedString")] string account; [XmlElement(ElementName = "deptCode", DataType = "normalizedString"] string deptCode; } 

当该XML反序列化时:

 XmlSerializer serializer = new XmlSerializer(typeof(Foo)); Foo myFoo = (Foo) serializer.Deserialize(xmlReader); 

我得到以下值:

 Foo.account = "\r\n 1234567890 \r\n" Foo.deptCode = "\r\n ABCXYZ \r\n" 

而不是预期的

 Foo.account = "1234567890" Foo.deptCode = "ABCXYZ" 

我怎样才能使反序列化过程给我预期的结果? 我认为DataType="normalizedString"可能会这样做,但它似乎没有效果,当我使用XmlReaderSettings.IgnoreWhitespace ,它只会带走“\ r”字符,留下“\ n 1234567890”

它似乎按预期工作。 来自IgnoreWhitespace文档:

不被视为重要的空格包括空格,制表符和用于分隔标记以获得更高可读性的空行。

基本上,它所做的是保留 (当设置为false )元素之间的空格,例如:

  Text  

阅读器将返回之间的换行符。 将IgnoreWhitespace设置为true ,它不会。

为了实现您的目标,您必须进行程序化修整,如Kirill所述。 当你考虑它时,读者应该如何知道元素的纯字符串内容的空白(如在你的例子中)是仅仅用于缩进目的还是实际内容?

有关忽略空格的更多阅读,您可能需要在此处和此处查看 。

您可以创建自定义XmlTextReader类:

 public class CustomXmlTextReader : XmlTextReader { public CustomXmlTextReader(Stream stream) : base(stream) { } public override string ReadString() { return base.ReadString().Trim(); } } 

尝试使用XmlTextReader进行反序列化,并将WhiteSpaceHandling属性设置为WhiteSpaceHandling.None并且Normalization = true