2010-03-19 10 views
5

Rozważmy następujące klasy SERIALIZABLE:.net serializacji XML: jak określić nazwy elementu głównego i element podrzędny tablicy za

class Item {...} 
class Items : List<Item> {...} 
class MyClass 
{ 
    public string Name {get;set;} 
    public Items MyItems {get;set;} 
} 

chcę wyjście odcinkach wyglądać:

<MyClass> 
    <Name>string</Name> 
    <ItemValues> 
     <ItemValue></ItemValue> 
     <ItemValue></ItemValue> 
     <ItemValue></ItemValue> 
    </ItemValues> 
</MyClass> 

Zawiadomienie o nazwy elementów ItemValues ​​i ItemValue nie pasują do nazw klas Item i Items, zakładając, że nie mogę zmienić klasy Item lub Items, czy istnieje jakiś powód, dla którego należy podać żądane nazwy elementów, modyfikując klasę MyClass?

+0

Jaką serializacji? 'XmlSerializer'? 'DataContractSerializer'? –

+0

@John - XmlSerializer – Jeremy

Odpowiedz

6
public class MyClass 
{ 
    public string Name {get;set;} 
    [XmlArray("ItemValues")] 
    [XmlArrayItem("ItemValue")] 
    public Items MyItems {get;set;} 
} 
1

Możecie zajrzeć do „How to: Specify an Alternate Element Name for an XML Stream

Artykuł ten omawia używając XmlElementAttribute „s ElementName do osiągnięcia tego celu.

+0

Proszę nie dodawać linków .NET 1.1. Ktoś, kto kliknie ten link i nie zauważy, kliknie linki w dokumencie i będzie prowadził do coraz większej ilości starych informacji. –

+0

W rzeczywistości "[XmlElement]' nie pomoże tutaj; które pozwalają zrobić ' String' (uwaga nie '' ), ale nie to, co zadaje pytanie. –

0

Można również rozważyć użycie Linq do Xml do skonstruowania XML z klasy. Coś jak

XElement element = new XElement(
    "MyClass", 
    new XElement("Name", myClass.Name), 
    new XElement(
     "ItemValues", 
     from item in myClass.Items 
     select new XElement(
      "ItemValue", 
      new XElement("Foo", item.Foo)))); 

Które spowodowałoby

<MyClass> 
    <Name>Blah</Name> 
    <ItemValues> 
    <ItemValue> 
     <Foo>A</Foo> 
    </ItemValue> 
    <ItemValue> 
     <Foo>B</Foo> 
    </ItemValue> 
    </ItemValues> 
</MyClass> 
Powiązane problemy