Как сериализовать свойство свойства, а не все свойство, используя атрибуты XML? - PullRequest
1 голос
/ 07 мая 2019

Я хочу сериализовать объект, который содержит свойства, и одно из этих свойств я хочу только сериализовать его имя.

Как это сделать без использования IXmlSerializable интерфейса, только с использованием атрибутов.

[Serializable]
public class Class
{
    public Class()
    {
    }

    [XmlAttribute]
    public string ClassId{get;set;}

    [XmlAttribute]
    public Teacher Teacher{get;set;}

    [XmlArray("Students")]
    [XmlArrayItem("Student", Type=typeof(Student))]
    public List<Student> Students { get; } = new List<Student>();
}


[Serializable]
public class Student 
{
    public Student()
    {

    }

    public Class CurrentClass{get;set;}


    [XmlAttribute]
    public string Name { get; set; } = "New Student";

    [XmlAttribute]
    public int Age { get; set; } = 10;

}

CurrentClass это свойство я не хочу игнорировать.

Я хочу сериализовать только его значение CurrentClass.ClassId.

1 Ответ

0 голосов
/ 07 мая 2019

Если вы ищете для сериализации ClassId с объектом Student, имеет смысл иметь свойство ClassId, а не весь объект Class.

public class GenerateXml
{
        public static void Create()
        {
            Class c = new Class();
            c.Teacher = new Teacher() {Name = "Mr. Henry"};
            var s = new Student() { Age = 14, Name = "Suzy", Teacher = c.Teacher };
            c.Students.Add(s);
            s = new Student() {Age = 13, Name = "Adam", Teacher = c.Teacher};
            c.Students.Add(s);

            var serializer = new XmlSerializer(c.GetType());
            XmlTextWriter writer = new XmlTextWriter("class.xml", Encoding.ASCII);
            writer.Formatting = Formatting.Indented;
            writer.Indentation = 4;
            serializer.Serialize(writer, c);
        }
}

[Serializable]
public class Class
{
    public Class()
    {
    }

    [XmlAttribute]
    public string ClassId { get; set; }

    [XmlElement]
    public Teacher Teacher { get; set; }

    [XmlArray("Students")]
    [XmlArrayItem("Student", Type = typeof(Student))]
    public List<Student> Students { get; } = new List<Student>();
}


[Serializable]
public class Student
{
    public Student()
    {

    }

    [XmlElement]
    public Teacher Teacher { get; set; }

    [XmlAttribute]
    public string ClassId { get; set; }

    [XmlAttribute]
    public string Name { get; set; } = "New Student";

    [XmlAttribute]
    public int Age { get; set; } = 10;

}

[Serializable]
public class Teacher
{
    public Teacher()
    {

    }

    [XmlAttribute]
    public string Name { get; set; } = "New Teacher";

    [XmlAttribute]
    public int Age { get; set; } = 30;

}
...