Aşağıdaki XML'i bir nesneye dönüştürmek/serileştirmek istiyorum.Xml'den C# ile birden çok veri türü içeren bir liste nasıl serileştirilir?
<Discounts>
<Discount Type="Voucher" Key="ABCD00001" Percent="2" />
<Discount Type="Quantity">
<Periods>
<Period From="Thu, 31 Dec 2009 23:00:00 GMT" Quantity="1" />
<Period From="Thu, 31 Dec 2009 23:00:00 GMT" Quantity="2" />
</Periods>
</Discount>
</Discounts>
@ Tür özniteliğinin serileştirmek için hangi nesne türünün kullanılması gerektiğini tanımlaması mümkün mü? C# Örneğin
:
[XmlArray]
[XmlArrayItem("Discount",typeof(Voucher)]
[XmlArrayItem("Discount",typeof(Quantity)]
public List<Discount> Discounts { get; set; }
benim açıklama mantıklı umuyoruz. Herhangi bir yardım takdir edilecektir. Teşekkürler.
Güncelleme Andrew Anderson cevap sonrası:
<Discounts>
<Discount xsi:Type="Voucher" Key="ABCD00001" Percent="2" />
<Discount xsi:Type="Quantity">
<Periods>
<Period From="Thu, 31 Dec 2009 23:00:00 GMT" Quantity="1" />
<Period From="Thu, 31 Dec 2009 23:00:00 GMT" Quantity="2" />
</Periods>
</Discount>
</Discounts>
benim sınıfları değişti şöyle görünecek şekilde:
[Serializable]
[XmlInclude(typeof(Voucher))]
[XmlInclude(typeof(Quantity))]
[XmlRoot("Discount")]
public class Discount
{ ... }
public class Quantity : Discount { }
public class Voucher : Discount { }
bu deserialize
İştegüncellenen XML 'İndirimler' listesinde iki 'İndirim' nesnesi vardır. Bu noktada listenin bir 'Miktar' nesnesi ve 'Kupon' nesnesinin olması beklenir. Bunun nedeni, listemin yalnızca bir 'İndirim' nesnesine sahip olması olarak tanımlanabilir. 'İndirimlerim' liste nesnesinin kodu aşağıdadır.
[XmlArray]
[XmlArrayItem("Discount")]
public List<Discount> Discounts { get; set; }
Şimdi, soru, iki farklı nesne türünü içerecek şekilde listeyi nasıl ayarlayabilirim? Eğer XML üzerinde kontrol varsa
, xml görünümü üzerinde esnek, ya da sen ettik tam olarak olmak zorunda gönderildi? –
Biçimden siz sorumlusunuz mu? Eğer öyleyse, neden XML'de "VoucherDiscount" ve "QuantityDiscount" ile "İndirim" yerine? – Joseph
Geldiğinde ve çıktığında bir stil sayfasını kullanmanın en kolayı gibi görünebilir, ancak bir şeyi değiştirmekten kaçınmak istiyorum. – chafnan