使用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