如何使用 C# 映射反序列化 XML 文档

Posted

技术标签:

【中文标题】如何使用 C# 映射反序列化 XML 文档【英文标题】:How to Mapping Deserialize XML document using c# 【发布时间】:2021-03-26 14:22:57 【问题描述】:

我是 C# 编程的新手,我陷入了如何反序列化这个 XML 文档,我看过这个教程 How to Deserialize XML document,它很有帮助,但是你可以看到我的 XML 包含更多信息,而且他更复杂:

<?xml version="1.0" encoding="utf-8"?>
<Clas-s-rooms>
    <Clas-s-room name="Clas-s-roomA">
        <Students name = "John"/>
        <Students name = "Bryan"/>
        <Students name = "Eva"/>
    </Clas-s-room>
    <Clas-s-room name="Clas-s-roomB">
        <Students name = "Harry"/>
        <Students name = "Emma"/>
        <Students name = "Joe"/>
    </Clas-s-room>
    <Clas-s-room name="Clas-s-roomC">
        <Students name = "Lionnel"/>
        <Students name = "Rio"/>
        <Students name = "Eva"/>
    </Clas-s-room>
</Clas-s-rooms>

我的主要目标是从我的 XML 文件创建教室地图:

示例:字典教室,

键 1:教室 A,价值观:John、Bryan、Eva

关键 2:教室 B,价值观:Harry、Emma、Joe

关键 3:classicC,价值观:Lionnel、Rio、Eva

感谢您的帮助

【问题讨论】:

【参考方案1】:

尝试以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Linq;

namespace ConsoleApplication178

    class Program
    
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        
            XmlReader reader = XmlReader.Create(FILENAME);
            XmlSerializer serializer = new XmlSerializer(typeof(Clas-s-rooms));
            Clas-s-rooms clas-s-rooms = (Clas-s-rooms)serializer.Deserialize(reader);
            reader.Close();
            //using xml linq
            XDocument doc = XDocument.Load(FILENAME);
            Dictionary<string, List<string>> dict = doc.Descendants("Clas-s-room")
                .GroupBy(x => (string)x.Attribute("name"), y => y)
                .ToDictionary(x => x.Key, y => y.Elements("Students").Select(x => (string)x.Attribute("name")).ToList());
        
    
    public class Clas-s-rooms
    
        [XmlElement()]
        public List<Clas-s-room> Clas-s-room  get; set; 
    
    public class Clas-s-room
    
        [XmlAttribute]
        public string name  get; set; 

        [XmlElement()]
        public List<Students> Students  get; set; 

    
    public class Students
    
        [XmlAttribute]
        public string name  get; set; 
    

【讨论】:

谢谢它和我一样工作,除了,非常感谢兄弟:)

以上是关于如何使用 C# 映射反序列化 XML 文档的主要内容,如果未能解决你的问题,请参考以下文章

如何反序列化 C# 对象中复杂的 XML 格式并读取它以使用其值?

使用 C# Xml.Serialization 库反序列化每个重复的 XML 节点并将其映射到对象的属性

如何使用 C# XML 反序列化解析 FCPXML 文件

如何反序列化 C# 中只有属性的 xml 元素?

如何在c#中使用具有相同名称但不同属性和结构的元素反序列化XML

如何将 XML 反序列化为 C# 中的对象? [复制]