Web サービスから燃料価格を取得するアプリを作成しています。燃料をキーとして Price オブジェクトの IDictionary を逆シリアル化したい (これと同様)。
これを行うためのセッターを作成しましたが、シリアライゼーションではリストのセッターではなく Add メソッドを使用することがわかりました。シリアライゼーション API を使用してこれを行う方法はありますか? または、カスタムのシリアライゼーション コードを記述する必要がありますか?
XMLは次のようになります
<?xml version="1.0"?>
<prices>
<price fuel="Petrol">152.43</price>
<price fuel="Diesel">147.53</price>
</prices>
コードは次のようになります
[XmlRoot("prices")]
public class FuelPrices
{
private IDictionary<Fuel, Price> prices = new Dictionary<Fuel, Price>();
// This is used for serialising to XML
[XmlElement("price")]
public ICollection<Price> Prices
{
get
{
return prices.Values;
}
set
{
prices = new Dictionary<Fuel, Price>();
foreach (Price price in value)
{
prices[price.Fuel] = price;
}
}
}
// These properties are used to access the prices in the code
[XmlIgnore]
public Price PetrolPrice
{
get
{
Price petrolPrice;
prices.TryGetValue(Fuel.Petrol, out petrolPrice);
return petrolPrice;
}
}
[XmlIgnore]
public Price DieselPrice
{
get
{
Price dieselPrice;
prices.TryGetValue(Fuel.Diesel, out dieselPrice);
return dieselPrice;
}
}
}