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

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

<?xml version="1.0" encoding="utf-8"?>
<Classrooms>
    <Classroom name="ClassroomA">
        <Students name = "John"/>
        <Students name = "Bryan"/>
        <Students name = "Eva"/>
    </Classroom>
    <Classroom name="ClassroomB">
        <Students name = "Harry"/>
        <Students name = "Emma"/>
        <Students name = "Joe"/>
    </Classroom>
    <Classroom name="ClassroomC">
        <Students name = "Lionnel"/>
        <Students name = "Rio"/>
        <Students name = "Eva"/>
    </Classroom>
</Classrooms>

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

示例:字典教室,

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

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

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

感谢您的帮助

【问题讨论】:

    标签: c# xml serialization deserialization xml-serialization


    【解决方案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(Classrooms));
                Classrooms classrooms = (Classrooms)serializer.Deserialize(reader);
                reader.Close();
                //using xml linq
                XDocument doc = XDocument.Load(FILENAME);
                Dictionary<string, List<string>> dict = doc.Descendants("Classroom")
                    .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 Classrooms
        {
            [XmlElement()]
            public List<Classroom> Classroom { get; set; }
        }
        public class Classroom
        {
            [XmlAttribute]
            public string name { get; set; }
    
            [XmlElement()]
            public List<Students> Students { get; set; }
    
        }
        public class Students
        {
            [XmlAttribute]
            public string name { get; set; }
        }
    }
    

    【讨论】:

    • 谢谢它和我一样工作,除了,非常感谢兄弟:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多