2012-04-24 21 views
5

, bu bende ne ben içine bu serisini sınıfları yazmaya çalışıyorumdeserializing xml, listede <> ile sorun

<map version="1.0"> 
    <properties> 
     <property name="color" value="blue" /> 
     <property name="size" value="huge" /> 
     <property name="texture" value="rugged" /> 
    </properties> 
</map> 

aşağıdaki XML olduğunu gelmiş I:

[XmlRoot("map")] 
public class MyMap 
{ 
    [XmlAttribute("version")] 
    public decimal Version { get; set; } 
    [XmlElement("properties")] 
    public List<MyProperty> Properties { get; set; } 
} 

public class MyProperty 
{ 
    [XmlAttribute("name")] 
    public string Name { get; set; } 
    [XmlAttribute("value")] 
    public string Value { get; set; } 
} 

Sorun şu ki, özellik listesini okuyamıyorum, sadece bir giriş alıyorum ve hem Ad hem de Değer içinde boş.

Bunu çalışması için ayarlamam gereken bazı sihirli özellikler var mı?

+0

özellikleridir ve bunu hiç deserializing şaşırdım. – Tejs

cevap

12

MyMap'i aşağıdaki gibi değiştirmelisiniz. XmlArray ve XmlArrayItem yukarıdaki o zaman geçersiz, sahip tüm XML ise sihirli

[XmlRoot("map")] 
public class MyMap 
{ 
    [XmlAttribute("version")] 
    public decimal Version { get; set; } 
    [XmlArray("properties")] 
    [XmlArrayItem("property")] 
    public List<MyProperty> Properties { get; set; } 
} 
+0

Mükemmel, bu mükemmel çalıştı. Eğer birisi bu özellikler hakkında iyi bir öğreticiden ve nasıl çalıştıklarından haberdar olursa bunu takdir ediyorum. Tek bulduğum çok basit olanların kopyaları/yapıştırmaları. – Toodleey

+0

Hala çok ilgili. Bugün yaklaşık 2 saat beni yakaladı. Anlamadım. Çok teşekkürler –

1

Bir çözüm bulmanın bir yolu, nesneyi kod içinde doldurmak ve sonra xml'ye serileştirmek ve şemanın neye benzediğini görmek olabilir. Ayrıca sınıflarınızı otomatikleştirmek için xsd.exe'yi de kullanabilirsiniz.

yerine XmlElement ait
2

, deneyin:

[XmlArray("Properties")] 

... Liste <> mülkiyet.

+0

XML büyük/küçük harfe duyarlı, Özellikler! = Özellikler – bjoern

İlgili konular