2017-12-25 59 views
0

3つの異なるオブジェクトを3つの異なるXMLにシリアライズする必要があります。さらに、私はそれを逆シリアル化します。クラスシリアライゼーションデザイン

私のクラスのデザイン:

class Program 
{ 
    public static void Main() 
    { 
     CarsPersistence cars = new CarsPersistence() 
     { 
      Cars = new Car[] 
      { 
       new Car{ Name = "Car1", Speed = 201}, 
       new Car{ Name = "Car2", Speed = 202}, 
       new Car{ Name = "Car3", Speed = 203}, 
       new Car{ Name = "Car4", Speed = 204}, 
       new Car{ Name = "Car5", Speed = 205}, 
      } 
     }; 

     WaysPersistence ways = new WaysPersistence() 
     { 
      Ways = new Way[] 
      { 
       new Way{Number = 100, Length = 200 }, 
       new Way{Number = 101, Length = 201 }, 
       new Way{Number = 102, Length = 202 }, 
       new Way{Number = 103, Length = 203 }, 
       new Way{Number = 104, Length = 204 }, 
       new Way{Number = 105, Length = 205 }, 
       new Way{Number = 106, Length = 206 }, 
       new Way{Number = 107, Length = 207 }, 
      } 
     }; 

     CarsWaysPersistence carsWays = new CarsWaysPersistence() 
     { 
      CarsWays = new KeyValuePair<Car, Way>[] 
      { 
       new KeyValuePair<Car, Way>(cars.Cars[0], ways.Ways[2]), 
       new KeyValuePair<Car, Way>(cars.Cars[3], ways.Ways[1]) 
      } 
     }; 
    } 
} 

[Serializable] 
public class Car 
{ 
    public int Speed { get; set; } 
    public string Name { get; set; } 

} 

[Serializable] 
public class CarsPersistence 
{ 
    public Car[] Cars { get; set; } 
} 

[Serializable] 
public class Way 
{ 
    public int Number { get; set; } 
    public int Length { get; set; } 
} 

[Serializable] 
public class WaysPersistence 
{ 
    public Way[] Ways { get; set; } 
} 

public class CarsWaysPersistence 
{ 
    public KeyValuePair<Car, Way>[] CarsWays { get; set; } 
} 

私は別のXMLファイルに3つの永続クラス(CarsPersistence、WaysPersistence、CarsWaysPersistence)をシリアライズします。

私の問題は重複しています:CarsWaysPersistenceは、既に他のXMLファイルで構成されているCarオブジェクトとWayオブジェクトを持っています。おそらく、私はXMLファイルで参照を保存することはできません。

この複製をどのように解決できるか。 ありがとう

+0

代わりにDictionaryを使用します。public KeyValuePair [] CarsWays {get;セット; }:公共の辞書> CarsWays {get;セット; } – jdweng

+0

jdwengありがとうございますが、私を助けません – zzfima

+0

リストは、重複の問題を解決する必要があります。 – jdweng

答えて

1

1)すべての車をシリアル化してください。 2)すべての方法をシリアライズします。 3)車のNameユニークという識別子で使用します。あなたはWayにいくつかのユニークなキーを提供しなければなりません。これにより、キーでマップすることができます:<car_name, way_key>