Cum serializa colecții în .net

voturi
4

Vreau să serializam o colecție de obiecte de stocare / regăsire din fișierul meu app.config. (Sunt folosind codul de la un exemplu de la Jeff Attwood blog de intrare The Last Configuration Secțiunea Handler .. Revisited ).

Ceea ce vreau să știu, este motivul pentru colecțiile de obiecte de tip

public class MyClass
{
  ...
}

obține serializate un element XML numit

<ArrayOfMyClass>...</ArrayOfMyClass> 

În acest exemplu eu sunt, folosind o listă generică de obiecte Clasa_Mea. Am încercat, de asemenea, crearea unei noi clase, care moștenește de la listă și XML rezultat este exact la fel.

Există o modalitate de a suprascrie numele elementului XML utilizat atunci când serializarea / deserializing?

Întrebat 12/03/2009 la 15:02
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
3

Ei nu fac în cazul în care acestea sunt elemente ale unui copil de tip - puteți utiliza [XmlRoot], [XmlType], [XmlElement]și [XmlArray]și [XmlArrayItem]în diverse combinații pentru a obține rezultate diferite - din păcate, specificul depind de structura exactă ...

Publicat 12/03/2009 la 15:07
sursa de către utilizator

voturi
3

Aruncati o privire la XmlArrayAttribute atributul

Publicat 12/03/2009 la 15:07
sursa de către utilizator

voturi
4

Când moștenesc de la Lista puteți încerca ceva de-a lungul liniilor de

[Serializable]
[System.Xml.Serialization.XmlRoot("SuperDuperCollection")]
public class SuperDuperCollection : List<MyClass> { ... }

pentru a decora clasa ta, folosind diferite XmlAttributes ar lăsa să aibă un control asupra modului în care XML-ul este de ieșire atunci când serializat.

Doar o modificare suplimentară cu un cod și de ieșire de testare:

[Serializable]
public class MyClass
{
public int SomeIdentifier { get; set; }
public string SomeData { get; set; }
}

....

SuperDuperCollection coll = new SuperDuperCollection
{
    new MyClass{ SomeData = "Hello", SomeIdentifier = 1},
    new MyClass{ SomeData = "World", SomeIdentifier = 2}
};

Console.WriteLine(XmlSerializeToString(coll));

ieşire:

<SuperDuperCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyClass>
    <SomeIdentifier>1</SomeIdentifier>
    <SomeData>Hello</SomeData>
  </MyClass>
  <MyClass>
    <SomeIdentifier>2</SomeIdentifier>
    <SomeData>World</SomeData>
  </MyClass>
</SuperDuperCollection>
Publicat 12/03/2009 la 15:10
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more