XmlElement 读取为不区分大小写的 C#
Posted
技术标签:
【中文标题】XmlElement 读取为不区分大小写的 C#【英文标题】:XmlElement read as case insensitive C# 【发布时间】:2020-07-30 18:04:34 【问题描述】:我正在使用 XmlSeriazlier 反序列化 xml 文件。
var serializer = new XmlSerializer(typeof(T));
using (var reader = document.CreateReader())
var result = (T)serializer.Deserialize(reader);
Xml 可以包含不同大小写的元素。 样本
<Layers>
<Layer name="something" />
<Layer name="anything" />
<layer name="nothing" /> ====> 'l' instead of 'L'
</Layers>
现在我的课是这样的。
public class Layers
[XmlElement("Layer")]
public List<Layer> Layers get; set;
现在这不会从 xml 中读取“层”。如何读取所有 xml 元素并将它们保存在一个列表中。
【问题讨论】:
Xml 区分大小写,那么为什么不首先确保 Xml 文件正确无误? @Sean 无法更改的旧旧 xml。所以必须支持这些。 相关:Case insensitive XML parser in c#, Deserialize/Read xml when casing of elements is inconsistent.. 另一种选择是创建一个 XmlReader decorator,如图所示 here 和 here(在 Chaining XmlReaders 下)然后子类化装饰器并规范化所有的大小写元素和属性名称。 【参考方案1】:您可以让您的 Layer
类继承 IXmlSerializable
并在您的 ReadXml
实现中实现类似于以下代码的内容:
while (!reader.EOF)
// Use string.Compare with StringComparison.OrdinalIgnoreCase to ignore case
if (reader.NodeType == XmlNodeType.Element && string.Compare(reader.Name, "Layer", StringComparison.OrdinalIgnoreCase))
// reading code
else
reader.Read();
请注意,我没有测试代码,但这可能是解决您问题的一种方法。
【讨论】:
以上是关于XmlElement 读取为不区分大小写的 C#的主要内容,如果未能解决你的问题,请参考以下文章
将 Jersey/Jackson 配置为不使用 @XmlElement 字段注释进行 JSON 字段命名
如何在 Win32 控制台应用程序中将 argv[] 设置为不区分大小写?