2011-05-09 25 views
8

Takip eden sınıfa ve onu tutan listeye sahibim:Sınıfı XML'e seri hale getirin mi?

public class Transport 
{ 
    public string TransportType { get; set; } 
    public string Mode { get; set; } 
    public class Coordinates 
    { 
     public float ID { get; set; } 
     public float LocX { get; set; } 
     public float LocY { get; set; } 
     public float LocZ { get; set; } 
     public ObjectState State { get; set; } 
     public List<int[]> Connections = new <int[]>(); 
    } 
} 

public enum ObjectState 
{ 
    Fly, 
    Ground, 
    Water 
} 

public static List<Transport> Tracking = new List<Transport>(); 

Takibi XML'e nasıl serileştiririm?

[Serializable] 'ı listede kullanabileceğimi ve dosyaya serileştirebileceğimi biliyorum ancak XML olarak nasıl kaydedileceğimi bildiğimden emin değilim.

cevap

19

sınıflarınızın hem [Serializable] özniteliği ile etiketlendi, sonra bir dosyaya şeyler kaydetme gibi basit olmalıdır Çıktının nasıl özelleştirileceğini soruyorum. Yani [XmlAttribute] ve [XmlElement] nitelikleri bunun içindir:

public class Transport 
{ 
    // Store TransportType as an attrribute called Type in the XML 
    [XmlAttribute("Type")] 
    public string TransportType { get; set; } 

    // Rest of Implementation 
} 
+0

Benim asıl sorun çıkarır biçimi, nasıl vb niteliği olarak ne istediğini kişiselleştirmek olur edebilir edilir? – Guapo

+0

@Guapo, Elements [Öğeler] 'in karşıtı olarak nitelikleri serileştirmek üzere ayarlamak için özellikler/alanlar üzerindeki '[XmlAttribute] özelliğini kullanın. Serileştirmeyi kontrol etmek için süsleyebileceğiniz diğer birçok özellik vardır. Bakınız: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributeattribute.aspx – vcsjones

+0

@vcsjones Teşekkürler, yardımcı oluyor, bazı önemli bir öğeyi bir öğeye dönüştürmeyi zorlaştırdım ama şimdi hepsi dizildi. – Guapo

0

Bir akışını ve bir XmlSerializer nesne ihtiyaç aşağıda bir örnek verilmiştir. Ayrıca, tüm sınıflarınızın özelliklerini serileştirmek istediğinizi varsayıyorum.

var serializer = new XmlSerializer(typeof(Transport)); 

using(var writer = new StreamWriter("C:\\Path\\To\\File.xml")) 
{ 
    serializer.Serialize(writer, instance); 
} 

Güncelleme

Maalesef olduğunu fark etmemiştim: olarak

İlgili konular