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 字段命名

字符串比较时如何将Sqlite3设置为不区分大小写?

如何在 Win32 控制台应用程序中将 argv[] 设置为不区分大小写?

我正在为不和谐的机器人编写代码,如果字符串不区分大小写,我希望这样,但我不知道如何

nginx字体文件配置

Nginx服务器配置之location语法分析