繁体   English   中英

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

[英]How to Mapping Deserialize XML document using c#

i am new to c # programming and im stuck in how ot Deserialize this XML document, i have seen this tutorial How to Deserialize XML document and it was helpful but as you can see my XML contains more informations and he is more complex:

<?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 文件中创建一个 Map 教室:

示例:Dictionnary<string,List> 教室,

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

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

关键 3:教室C,价值观:Lionnel、Rio、Eva

感谢帮助

尝试以下操作:

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; }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM