I can't seem to get the XmlSerializer attributes to work. I have
public class DriveData
{
public string Model { get; set; }
public string Type { get; set; }
public int SizeGB { get; set; }
public string SerialNumber { get; set; }
public bool IsOK { get; set; }
}
static List<DriveData> DiskDrives { get; set; }
XmlSerializer serializer = new XmlSerializer(typeof(List<DriveData>));
FileStream xmlFile = File.Create("DiskDrives.xml");
serializer.Serialize(xmlFile, DiskDrives);
xmlFile.Close();
What I want is:
<?xml version="1.0" encoding="utf-8" ?>
<HardDrives>
<HardDrive>
<Model>Seagate1</Model>
...
</HardDrive>
<HardDrive>
...
</HardDrive>
But what I'm getting is:
<?xml version="1.0"?>
<ArrayOfDriveData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DriveData>
<Model>Seagate1</Model>
<Type>SATA</Type>
<SizeGB>999</SizeGB>
...
</DriveData>
<DriveData>
...
</DriveData>
</ArrayOfDriveData>
[XmlElement(ElementName = "HardDrives")]
on my List<DriveData>
does nothing. [XmlElement(ElementName = "HardDrive")]
on my DriveData
class causes a build error. How do I set the root and the <HardDrive>
elements names to what I want?
You can keep your model. Use XmlType attribute for the class and second argument as new XmlRootAttribute("HardDrives") while creating serializer object.
[XmlType("HardDrive")]
public class DriveData
{
public string Model { get; set; }
public string Type { get; set; }
public int SizeGB { get; set; }
public string SerialNumber { get; set; }
public bool IsOK { get; set; }
}
class Program
{
static List<DriveData> DiskDrives { get; set; } = new List<DriveData>();
static void Main(string[] args)
{
DiskDrives.Add(new DriveData { Model = "Seagate1", Type = "SATA", SizeGB = 999 });
DiskDrives.Add(new DriveData { Model = "Seagate2", Type = "SATA", SizeGB = 777 });
XmlSerializer serializer = new XmlSerializer(typeof(List<DriveData>), new XmlRootAttribute("HardDrives"));
FileStream xmlFile = File.Create("DiskDrives.xml");
serializer.Serialize(xmlFile, DiskDrives);
xmlFile.Close();
Console.Read();
}
}