gpt4 book ai didi

c# - 如何根据 xml 节点的值将子对象反序列化为父对象列表(例如,List)?

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:59 24 4
gpt4 key购买 nike

我有一个名为 VehicleInfo.xml 的 XML 文件。我想反序列化车辆列表中的 VehicleInfo。现在我有一个名为 Vehicle 的基类和三个名为 Car、Bike、Truck 的派生类。如何根据 xml 中车辆节点的值反序列化车辆的特定对象。(例如,如果节点值为 Car,则 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 程序只是例子,

那么,我如何根据节点 Vehicle 的值反序列化 VehicleList 类 Vehicle 列表中的特定对象(例如 Car、Bike 或 Truck)。

最佳答案

这是要序列化的代码和结果。 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>

关于c# - 如何根据 xml 节点的值将子对象反序列化为父对象列表(例如,List<Parent>)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55532545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com