2013-07-19 7 views
5

Mam klasy zdefiniowane jak poniżej:C# Zmiana nazw elementem pozycji na liście podczas szeregowania/deserializacji XML

[XmlRoot("ClassName")] 
public class ClassName_0 
{ 
    //stuff... 
} 

I wtedy stworzyć listę ClassName_0 jak takie:

var myListInstance= new List<ClassName_0>(); 

jest to kod używam do serializacji:

var ser = new XmlSerializer(typeof(List<ClassName_0>)); 
ser.Serialize(aWriterStream, myListInstance); 

jest to kod używam do deserializowania:

var ser = new XmlSerializer(typeof(List<ClassName_0>)); 
var wrapper = ser.Deserialize(new StringReader(xml)); 

Gdybym szeregować je do xml, xml wynikowy wygląda następująco:

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfClassName_0 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <ClassName_0> 
     <stuff></stuff> 
    </ClassName_0> 
    <ClassName_0> 
     <stuff></stuff> 
    </ClassName_0> 
</ArrayOfClassName_0> 

Czy istnieje sposób serializacji i móc deserializowania poniżej z/do listy ClassName_0?

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfClassName xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <ClassName> 
     <stuff></stuff> 
    </ClassName> 
    <ClassName> 
     <stuff></stuff> 
    </ClassName> 
</ArrayOfClassName> 

Dzięki!

+1

Myślę ten link może być użyteczne dla was, http://stackoverflow.com/questions/364253/how-to-deserialize-xml-document – sagar

+0

Dzięki za link. Niestety jest to wygenerowany kod, więc nie mogę utworzyć niestandardowej listy żądanego typu i dodać do niej wszystkich atrybutów elementu. Mogę tylko dodawać atrybuty do samych klas. – VARAK

Odpowiedz

0

Zrobiłem to, w końcu, z pomocą Jana Piotra. XmlRoot był niewłaściwym atrybutem, który można umieścić na klasie. Miał to być XmlType. W przypadku XmlType osiągany jest pożądany efekt.

2

W twoim przykładzie ClassName nie jest prawdziwym rootem. Prawdziwym rootem jest twoja lista. Więc musisz oznaczyć listę jako element główny. Twoja klasa to po prostu XmlElement.

+0

Więc XMLRoot nie ma w tym przypadku żadnego efektu? – VARAK

+0

Rozwinęłam to. Dzięki za pomoc :) – VARAK

+0

Nie ma problemu :) Ale może pomaga innym, jeśli mógłbyś zaktualizować swój post z działającym kodem :) –

1

spróbuj tego:

XmlType(TypeName="ClassName")] 
public class ClassName_0 
{ 
    //stuff... 
} 
0

dokonać korzeń drzewa dokumentu i ten korzeń będzie zawierać listę dowolnego obiektu.

[XmlRootAttribute("myDocument")] 
public class myDocument 
{ 
    [XmlArrayAttribute] 
    publict ClassName[] ArrayOfClassName {get;set;} 
} 

[XmlType(TypeName="ClassName")] 
public class ClassName 
{ 
    public string stuff {get;set;} 
} 
Powiązane problemy