2011-05-09 22 views
8

mam klasę naśladowania i listy, że posiada:Serialize class to XML?

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>(); 

jaki sposób serializacji XML do śledzenia?

wiem, że mogę korzystać z [Serializable] na liście i szeregować je złożyć, ale nie jestem pewien, w jaki sposób zdefiniować to być zapisane w formacie XML.

Odpowiedz

19

Jeśli zarówno swoich klasach zostały oznaczone za pomocą atrybutu [Serializable], następnie zapisywania rzeczy do pliku powinno być tak proste, jak:

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

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

Aktualizacja

Niestety, nie zdawali sobie sprawy byłaś pytanie o to, jak dostosować wyjście. To właśnie [XmlAttribute] i [XmlElement] atrybuty są dla:

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

    // Rest of Implementation 
} 
+0

Moim głównym problemem jest to format wyjścia, Jak bym personalizować co chcę jako atrybutu itp? – Guapo

+0

@Guapo użyj atrybutu '[XmlAttribute]' we właściwościach/polach, aby ustawić serializację jako atrybuty przeciwstawiające się elementom. Istnieje wiele innych atrybutów, które możesz ozdobić, aby kontrolować serializację. Zobacz: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributeattribute.aspx – vcsjones

+0

@vcsjones dzięki, że pomaga, miałem kilka poważnych trudności konwersji listy do elementu, ale teraz mam to wszystko uporządkowane. – Guapo

0

Trzeba strumienia i obiekt XmlSerializer, oto przykład:

FileStream fs = new FileStream(@"C:\MyPath", FileMode.OpenOrCreate); 

xmlSerializer = new XmlSerializer(typeof(MyClass)); 

xmlSerializer.Serialize(fs, myClassInstance); 

fs.Flush(); 
fs.Close(); 
fs.Dispose(); 

Nie zapomnij obsłużyć błędy swój własny sposób. I zakładam, że chcesz serializować wszystkie właściwości twojej klasy.