含下划线的XML节点反序列化后值为NULL的问题求助
XML反序列化时<Test_x0020_Id>节点返回NULL的解决思路
问题场景
XML中的<Shape>节点能正常反序列化取值,但<Test_x0020_Id>节点始终返回NULL。
XML内容
<?xml version="1.0" encoding="utf-8"?> <Test1> <TestData> <Test_x0020_Id>P123</Test_x0020_Id> <Shape>ROUND</Shape> </TestData> </Test1>
原C#代码
XmlSerializer serializer = new XmlSerializer(typeof(List<TestData>), new XmlRootAttribute("Test1")); StringReader stringReader = new StringReader(content); List<TestData> productList = (List<TestData>)serializer.Deserialize(stringReader); public class TestData { [XmlElement("Test_x0020_Id")] public string Testx0020Id{ get; set; } public string Shape { get; set; } }
解决思路
问题根源在于_x0020_是XML标准中对空格字符的转义表示(x0020对应空格的ASCII编码),XmlSerializer在解析时会自动将该转义序列转换为空格,所以你用Test_x0020_Id作为XmlElement的名称无法匹配到实际节点。
修正方案
直接将XmlElement特性的参数改为包含空格的名称即可:
public class TestData { [XmlElement("Test Id")] // 用空格替代转义序列_x0020_ public string Testx0020Id{ get; set; } public string Shape { get; set; } }
补充说明
如果坚持要保留_x0020_的写法,也可以通过XmlAttributeOverrides手动设置映射规则,但上述直接替换为空格的方式更简洁高效。
内容的提问来源于stack exchange,提问作者Naw
相关产品推荐
相关产品推荐

