XML包含对象列表的对象的序列化列表
问题描述:
我的对象结构与下面的简化代码类似。请注意,国家和汽车都需要成为班级,由于代码未包含在示例中,因此我无法使用字符串列表/数组。我想XML序列化,然后反序列化对象。XML包含对象列表的对象的序列化列表
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace XMLapp
{
public partial class Form1 : Form
{
List<Countries> Country = new List<Countries>();
List<string> cars = new List<string>();
public Form1()
{
InitializeComponent();
cars.Add("Audi");
cars.Add("BMW");
cars.Add("Mercedes");
addCountry("Germany", cars);
cars.Clear();
cars.Add("Ford");
cars.Add("Chevrolet");
cars.Add("Jeep");
addCountry("USA", cars);
TestXmlSerialize();
Console.WriteLine("Generated list");
}
void TestXmlSerialize()
{
XmlSerializer x = new XmlSerializer(Country.GetType());
x.Serialize(Console.Out, Country);
}
void addCountry(string name, List<string> cars)
{
Countries newCountry = new Countries();
newCountry.Name = name;
newCountry.AddCar(cars);
Country.Add(newCountry);
}
}
public class Countries
{
public string Name { get; set; }
List<Cars> car = new List<Cars>();
public void AddCar(List<string> cars)
{
for (int i = 0; i < cars.Count; i++)
{
Cars newCar = new Cars();
newCar.brand = cars[i];
car.Add(newCar);
}
}
class Cars
{
public string brand;
}
}
}
这会产生以下输出:
<?xml version="1.0" encoding="IBM437"?>
<ArrayOfCountries xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Countries>
<Name>Germany</Name>
</Countries>
<Countries>
<Name>USA</Name>
</Countries>
</ArrayOfCountries>
不过,我希望沿着
线的东西,我可以看到的是,汽车品牌都妥善保存在当地人&汽车窗口,但是如何将它们包含在序列化中?
答
XmlSerializer只序列化公共字段和属性。你需要让'汽车'领域和'汽车'级公开。
它不会生成您在问题中发布的精确xml布局,但它可以让您序列化和反序列化对象。
哦,没错!谢谢你,解决了它。 – Caliber