2016-09-15 11 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は、パブリックフィールドとプロパティのみをシリアル化します。あなたは 'car'フィールドとclass 'Cars'フィールドをpublicにする必要があります。

あなたの質問に投稿した正確なxmlレイアウトは作成されませんが、オブジェクトのシリアル化とデシリアライズを行うことができます。

+0

そうですよ!ありがとう、それはそれを解決しました。 – Caliber

関連する問題