我有一个名为 VehicleInfo.xml 的 XML 文件。
我想反序列化车辆列表中的 VehicleInfo。
现在我有一个名为 Vehicle 的基类和三个名为 Car、Bike、Truck 的派生类。
如何根据 xml 中的 Vehicle 节点的值反序列化车辆的特定对象。
(例如,如果节点值为 Car,则汽车对象应存储在车辆列表中)
<Vehicles>
<Vehicle>Car</Vehicle>
<Vehicle>Bike</Vehicle>
<Vehicle>Truck</Vehicle>
</Vehicles>
例如,
车辆列表类:
public class VehicleList
{
List<Vehicle> lstVehicles = new List<Vehicle>();
}
车辆类别:
public class Vehicle
{
public string name = "Vehicle";
}
汽车类别:
public class Car : Vehicle
{
public Car()
{
name = "Car";
}
}
自行车类:
public class Bike : Vehicle
{
public Bike()
{
name = "Bike";
}
}
卡车类别:
public class Truck : Vehicle
{
public Truck()
{
name = "Truck";
}
}
这个车辆程序只是一个例子,
那么,如何根据节点 Vehicle 的值反序列化 VehicleList 类中的车辆列表中的特定对象(例如汽车、自行车或卡车)。
这是要序列化的代码和结果。 XML 不能将数组作为根元素。因此,在这种情况下,有两个类是有意义的:Vehicles 和 Vehicle。请参阅下面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication107
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
Vehicles vehicles = new Vehicles()
{
vehicles = new List<Vehicle>() {
new Car() { make = "BMW"},
new Bike() { make = "Buffalo"},
new Truck() { make = "MAC"}
}
};
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(FILENAME, settings);
XmlSerializer serializer = new XmlSerializer(typeof(Vehicles));
serializer.Serialize(writer, vehicles);
}
}
public class Vehicles
{
[XmlElement("Vehicle")]
public List<Vehicle> vehicles { get; set; }
}
[XmlInclude(typeof(Car))]
[XmlInclude(typeof(Bike))]
[XmlInclude(typeof(Truck))]
public class Vehicle
{
public string make { get; set; }
}
public class Car : Vehicle
{
}
public class Bike : Vehicle
{
}
public class Truck : Vehicle
{
}
}
这是结果:
<?xml version="1.0" encoding="utf-8"?>
<Vehicles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Vehicle xsi:type="Car">
<make>BMW</make>
</Vehicle>
<Vehicle xsi:type="Bike">
<make>Buffalo</make>
</Vehicle>
<Vehicle xsi:type="Truck">
<make>MAC</make>
</Vehicle>
</Vehicles>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)