2016-09-15 173 views
0

我的对象结构与下面的简化代码类似。请注意,国家和汽车都需要成为班级,由于代码未包含在示例中,因此我无法使用字符串列表/数组。我想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> 

不过,我希望沿着

线的东西,我可以看到的是,汽车品牌都妥善保存在当地人&汽车窗口,但是如何将它们包含在序列化中?

回答

1

XmlSerializer只序列化公共字段和属性。你需要让'汽车'领域和'汽车'级公开。

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

+0

哦,没错!谢谢你,解决了它。 – Caliber