简体   繁体   English

XML序列化包含对象列表的对象列表

[英]XML Serializing list of objects containing list of objects

My object structure is similar to the simplified code below. 我的对象结构类似于下面的简化代码。 Please note that both Countries and Cars need to be classes, I can't use string list/array due to code not included in sample. 请注意,国家和汽车都必须是类,由于示例中未包含代码,所以我无法使用字符串列表/数组。 I want to XML serialize and later deserialize the objects. 我想对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;
        }

    }
}

This generates following output: 生成以下输出:

<?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>

However, I expected something along the lines of 但是,我期望有些类似

  <Countries>
    <Name>Germany</Name>
    <ArrayOfCars>
      <Brand>Audi</Brand>
      <Brand>BMW</Brand>
      <Brand>Mercedes</Brand>
    </ArrayOfCountries>
  </Countries>

I can see that the car brands are stored properly in the Locals & Autos window, but how do I include them in the serialization? 我可以看到汽车品牌已正确存储在“本地与汽车”窗口中,但是如何在序列化中包括它们?

XmlSerializer only serializes public fields and properties. XmlSerializer仅序列化公共字段和属性。 You need to make the 'car' field and the class 'Cars' public. 您需要公开“汽车”字段和“汽车”类别。

It won't produce the exact xml layout that you posted in your question, but it will let you serialize and deserialize the object. 它不会产生您在问题中发布的确切xml布局,但是它将允许您序列化和反序列化对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM