เริ่มจากการเตรียม Class
[Serializable]
[XmlRoot("PeopleData")]
public class People
{
[XmlArray("UserList")]
[XmlArrayItem("User")]
public List<Person> PersonList { get; set; }
public People()
{
PersonList = new List<Person>();
}
}
[Serializable]
public class Person
{
[XmlElement("FullName")]
public string Name { get; set; }
[XmlElement("CurrentAge")]
public int Age { get; set; }
[XmlAttribute("ID")]
public int Id { get; set; }
[XmlArray("Hobbies")]
[XmlArrayItem("Hobby")]
public List<string> Hobbies { get; set; }
public Person()
{
Hobbies = new List<string>();
}
}
สร้าง Object – ใส่ค่าลงใน Object
public static class XmlHelper
{
public static void ExportToXml<T>(T data, string filePath)
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StreamWriter writer = new StreamWriter(filePath, false, Encoding.UTF8))
{
serializer.Serialize(writer, data);
}
Console.WriteLine($"Export ข้อมูลไปที่ '{filePath}' สำเร็จ");
}
catch (Exception ex)
{
Console.WriteLine($"เกิดข้อผิดพลาดระหว่าง Export: {ex.Message}");
}
}
Export เป็น XML
class Program
{
static void Main(string[] args)
{
string xmlFilePath = "data.xml";
var peopleData = new People();
peopleData.PersonList.Add(new Person { Id = 1, Name = "สมชาย ใจดี", Age = 30, Hobbies = new List<string> { "อ่านหนังสือ" } });
peopleData.PersonList.Add(new Person { Id = 2, Name = "สมหญิง จริงใจ", Age = 25, Hobbies = new List<string> { "ฟังเพลง", "วิ่ง" } });
XmlHelper.ExportToXml(peopleData, xmlFilePath);
Console.WriteLine("\n-----------------------------------\n");
}
}

<?xml version="1.0" encoding="utf-8"?>
<PeopleData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserList>
<User ID="1">
<FullName>สมชาย ใจดี</FullName>
<CurrentAge>30</CurrentAge>
<Hobbies>
<Hobby>อ่านหนังสือ</Hobby>
</Hobbies>
</User>
<User ID="2">
<FullName>สมหญิง จริงใจ</FullName>
<CurrentAge>25</CurrentAge>
<Hobbies>
<Hobby>ฟังเพลง</Hobby>
<Hobby>วิ่ง</Hobby>
</Hobbies>
</User>
</UserList>
</PeopleData>
ถ้าเราต้องการอ่านกลับมาใช้งาน
/// <summary>
/// Import ข้อมูลจากไฟล์ XML พร้อม Validate กับ XSD (ถ้ามี)
/// </summary>
/// <param name="xsdPath">Path ของไฟล์ XSD (ถ้าเป็น null จะไม่ทำการ Validate)</param>
public static T ImportFromXml<T>(string filePath, string xsdPath)
{
if (!File.Exists(filePath))
{
throw new FileNotFoundException("ไม่พบไฟล์ XML ที่ระบุ", filePath);
}
// ตัวแปรสำหรับเก็บข้อผิดพลาดจากการ Validate
var validationErrors = new List<string>();
try
{
// --- ส่วนของการตั้งค่า Validation ---
var settings = new XmlReaderSettings();
if (!string.IsNullOrEmpty(xsdPath))
{
if (!File.Exists(xsdPath))
{
throw new FileNotFoundException("ไม่พบไฟล์ XSD ที่ระบุ", xsdPath);
}
// เพิ่ม Schema เข้าไปในการตั้งค่า
settings.Schemas.Add(null, xsdPath); // targetNamespace = null
settings.ValidationType = ValidationType.Schema;
// สร้าง Event Handler เพื่อดักจับ Error ตอน Validate
settings.ValidationEventHandler += (sender, args) =>
{
if (args.Severity == XmlSeverityType.Error)
{
validationErrors.Add($"บรรทัดที่ {args.Exception.LineNumber}, ตำแหน่งที่ {args.Exception.LinePosition}: {args.Message}");
}
};
}
// --- ทำการอ่านและ Deserialize ---
using (XmlReader reader = XmlReader.Create(filePath, settings))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
T result = (T)serializer.Deserialize(reader);
// หลังจาก Deserialize เสร็จ, ตรวจสอบว่ามี Error หรือไม่
if (validationErrors.Count > 0)
{
throw new XmlSchemaValidationException("ไฟล์ XML ไม่ถูกต้องตาม Schema:\n" + string.Join("\n", validationErrors));
}
return result;
}
}
catch (Exception ex)
{
Console.WriteLine($"เกิดข้อผิดพลาดระหว่าง Import: {ex.Message}");
return default(T);
}
}
ในกรณีที่มี XSD ด้วย เราสามารถส่งให้มัน validate ได้ด้วย
Console.WriteLine($"--- ทดสอบ Import '{xmlFilePath}' (ไฟล์ถูกต้อง) พร้อม Validate กับ XSD ---");
People importedData = XmlHelper.ImportFromXml<People>(xmlFilePath, xsdFilePath);
if (importedData != null)
{
Console.WriteLine("Import และ Validate สำเร็จ! ข้อมูลถูกต้องตาม Schema");
foreach (var person in importedData.PersonList)
{
Console.WriteLine($" - ID: {person.Id}, ชื่อ: {person.Name}, อายุ: {person.Age}");
}
}

