【问题标题】:XML Serializing list of objects containing list of objectsXML序列化包含对象列表的对象列表
【发布时间】:2017-01-24 02:09:37
【问题描述】:

我的对象结构类似于下面的简化代码。请注意 Country 和 Cars 都需要是类,由于示例中未包含代码,我不能使用字符串列表/数组。我想对对象进行 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>

但是,我预计会发生类似的事情

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

我可以看到汽车品牌正确存储在 Locals & Autos 窗口中,但是如何将它们包含在序列化中?

【问题讨论】:

    标签: c# xml list object serialization


    【解决方案1】:

    XmlSerializer 仅序列化公共字段和属性。您需要公开“汽车”字段和“汽车”类。

    它不会产生您在问题中发布的确切 xml 布局,但它可以让您序列化和反序列化对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      相关资源
      最近更新 更多