如何使用 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 节点并将其映射到对象的属性