Код ниже работает с более чем одним человеком. Две вещи, которые вы должны знать о множественных элементах с xml
1) Массив элементов с root из xml считается "Не правильно сформирован Xml". Спецификация xml разрешает массив, но библиотека Net по умолчанию не допускает этот массив, если только с XmlWriter не используется опция:
XmlWriterSettings settings = new XmlWriterSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlWriter writer = XmlWriter.Create(FILENAME, settings);
2) Xml сериализатор с массивом создает два тега 1) Человек 2) человек. Посмотрите выходные данные кода ниже, чтобы увидеть эти элементы.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
Person p1 = new Person() { A = 1, B = 2};
Person p2 = new Person() { A = 45, B = 65 };
Person p3 = new Person() { A = 213, B = 34 };
Person p4 = new Person() { A = 45, B = 234 };
Person p5 = new Person() { A = 324, B = 123 };
Person p6 = new Person() { A = 53, B = 53 };
Person p7 = new Person() { A = 46545, B = 6435 };
Person p8 = new Person() { A = 4355, B = 6435 };
Person p9 = new Person() { A = 4455, B = 6455 };
Person p10 = new Person() { A = 4455, B = 6345 };
List<Person> people = new List<Person>() { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 };
WriteToXmlFile(FILENAME, people);
}
public static void WriteToXmlFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
TextWriter writer = null;
try
{
var serializer = new XmlSerializer(typeof(T));
writer = new StreamWriter(filePath, append);
serializer.Serialize(writer, objectToWrite);
}
finally
{
if (writer != null)
writer.Close();
}
}
public static T ReadFromXmlFile<T>(string filePath) where T : new()
{
TextReader reader = null;
try
{
var serializer = new XmlSerializer(typeof(T));
reader = new StreamReader(filePath);
Console.WriteLine("file readed correctly");
return (T)serializer.Deserialize(reader);
}
finally
{
if (reader != null)
reader.Close();
}
}
}
public class Person
{
public int A { get; set; }
public int B { get; set; }
}
}