MST

星途 面试题库

面试题:C#中XML序列化时如何处理复杂对象图及自定义命名空间

给定一个具有嵌套类结构的复杂C#对象模型,比如一个包含教师类Teacher,教师类中有一个学生列表属性,每个学生类又有一些复杂的关联属性。在进行XML序列化时,如何正确处理对象图,并且为生成的XML文档自定义命名空间?请给出实现思路及关键代码片段。
43.8万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义类结构:按照题目要求定义Teacher类和Student类,并确保属性设置为可序列化。
  2. 使用XmlSerializer:通过XmlSerializer类来进行序列化操作。
  3. 自定义命名空间:利用XmlSerializerNamespaces类来为生成的XML文档自定义命名空间。

关键代码片段

using System;
using System.Xml;
using System.Xml.Serialization;

// 学生类
public class Student
{
    [XmlElement("StudentName")]
    public string Name { get; set; }
    // 其他复杂关联属性
    [XmlElement("StudentSpecialAttribute")]
    public string SpecialAttribute { get; set; }
}

// 教师类
public class Teacher
{
    [XmlElement("TeacherName")]
    public string Name { get; set; }
    [XmlArray("StudentsList")]
    [XmlArrayItem("Student")]
    public Student[] Students { get; set; }
}

class Program
{
    static void Main()
    {
        Teacher teacher = new Teacher
        {
            Name = "Mr. Smith",
            Students = new[]
            {
                new Student { Name = "Alice", SpecialAttribute = "High GPA" },
                new Student { Name = "Bob", SpecialAttribute = "Good at sports" }
            }
        };

        XmlSerializer serializer = new XmlSerializer(typeof(Teacher));
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("custom", "http://www.example.com/custom-namespace");

        using (XmlWriter writer = XmlWriter.Create("teacher.xml", new XmlWriterSettings { Indent = true }))
        {
            serializer.Serialize(writer, teacher, ns);
        }
    }
}

上述代码实现了将具有嵌套结构的Teacher对象序列化为XML,并为生成的XML文档自定义了命名空间。XmlSerializerNamespaces类的Add方法用于添加命名空间前缀和对应的URI。在序列化时传入该命名空间对象,即可在生成的XML文档中使用自定义命名空间。