Ты почти у цели. Использование:
[XmlType(TypeName = "Lesson")]
вместо
[XmlRoot(ElementName = "Lesson")]
Конечно, вы можете проверить это легко; ваш код с вышеуказанным изменением
[XmlType(TypeName = "Lesson")]
public class LessonOld
{
public LessonOld()
{
Students = new List<string>();
}
public string Name { get; set; }
public DateTime FirstLessonDate { get; set; }
public int DurationInMinutes { get; set; }
public List<string> Students { get; set; }
}
class Program
{
static void Main(string[] args)
{
TextWriter writer = new StreamWriter(Path.Combine(@"C:\Users\Francesco\Desktop\nanovg", "Lessons-temp.xml"));
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<LessonOld>));
xmlSerializer.Serialize(writer, new List<LessonOld> { new LessonOld() { Name = "name", DurationInMinutes = 0 } });
writer.Close();
}
}
производит это
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfLesson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Lesson>
<Name>name</Name>
<FirstLessonDate>0001-01-01T00:00:00</FirstLessonDate>
<DurationInMinutes>0</DurationInMinutes>
<Students />
</Lesson>
</ArrayOfLesson>
Как я видел, XmlRoot
отлично работает, когда вы хотите сериализовать один объект.
Рассмотрим этот код, полученный из вашего:
[XmlRoot(ElementName = "Lesson")]
public class LessonOld
{
public LessonOld()
{
Students = new List<string>();
}
public string Name { get; set; }
public DateTime FirstLessonDate { get; set; }
public int DurationInMinutes { get; set; }
public List<string> Students { get; set; }
}
class Program
{
static void Main(string[] args)
{
TextWriter writer = new StreamWriter(Path.Combine(@"C:\Users\Francesco\Desktop\nanovg", "Lessons-temp.xml"));
XmlSerializer xmlSerializer = new XmlSerializer(typeof(LessonOld));
xmlSerializer.Serialize(writer, new LessonOld() { Name = "name", DurationInMinutes = 0 });
writer.Close();
}
}
Будет выводиться
<?xml version="1.0" encoding="utf-8"?>
<Lesson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>name</Name>
<FirstLessonDate>0001-01-01T00:00:00</FirstLessonDate>
<DurationInMinutes>0</DurationInMinutes>
<Students />
</Lesson>