2010-03-19 2 views
5

는 다음 직렬화 클래스 고려 :.NET의 XML 직렬화 : 배열의 루트 요소와 자식 요소 이름을 지정하는 방법

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

주목하라 :

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

내가 직렬화 된 출력과 같이 할을 요소 이름 ItemValues ​​및 ItemValue가 Item 및 Items 클래스 이름과 일치하지 않습니다. Item 또는 Items 클래스를 변경할 수 없다고 가정 할 때 MyClass 클래스를 수정하여 원하는 요소 이름을 지정해야하는 이유가 무엇입니까? 당신이보고 할 수 있습니다

+0

어떤 종류를 만들 것

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

같은 뭔가? 'XmlSerializer'? 'DataContractSerializer'? –

+0

@John - XmlSerializer – Jeremy

답변

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

는 "How to: Specify an Alternate Element Name for an XML Stream"

그 기사는 XmlElementAttributeElementName는 이러한 목표를 달성하기 위해 사용하는 방법을 설명합니다.

+0

.NET 1.1 링크를 게시하지 마십시오. 해당 링크를 클릭하고 알려주지 않은 사용자는 문서의 링크를 클릭하면 더 많은 이전 정보가 표시됩니다. –

+0

사실, [XmlElement]는 여기서 도움이되지 않습니다; 즉,'문자열을'을 (더'를'주의 없음) 할 수 있습니다,하지만 문제는 요청하지 무슨. –

0

Linq to Xml을 사용하여 클래스에서 XML을 구성하는 방법도 고려해 볼 수 있습니다. 직렬화의

<MyClass> 
    <Name>Blah</Name> 
    <ItemValues> 
    <ItemValue> 
     <Foo>A</Foo> 
    </ItemValue> 
    <ItemValue> 
     <Foo>B</Foo> 
    </ItemValue> 
    </ItemValues> 
</MyClass> 
관련 문제