2010-05-13 4 views
0

컬렉션의 항목에 대한 요소 이름을 지정하는 일반적인 수집을 직렬화 :다음과 같이 내가 문자열의 일반적인 목록에서 파생 된 간단한 클래스가

[Serializable] 
[System.Xml.Serialization.XmlRoot("TestItems")] 
public class TemplateRoleCollection : List<string> 
{ 

} 

나는이를 직렬화 할 때, 나는 다음과 같은 XML을 얻을 :

<TestItems> 
    <string>cat</string> 
    <string>dog</string> 
    <string>wolf</string> 
</TestItems> 

컬렉션의 항목을 serialize하는 데 사용되는 XML 요소 이름을 재정의하는 방법이 있습니까? 나는 다음과 같은 XML을 생성 할 싶습니다 :

<TestItems> 
    <TestItem>cat</TestItem> 
    <TestItem>dog</TestItem> 
    <TestItem>wolf</TestItem> 
</TestItems> 

답변

3

당신은 클래스 수준에서이 지정하지 않은, 당신은 속성 수준을 지정하고 XmlArrayItemAttribute 사용

public class ContainerClass 
{ 
    [XmlArray("TestItems")] 
    [XmlArrayItem("TestItem")] 
    public List<string> TemplateRoles { get; set; } 
} 

이 또한주의 [Serializable]은 XML 직렬화에 아무런 영향을 미치지 않으며, 이진 또는 DataContract 직렬화에 사용됩니다.

+0

+1 완벽하게 작동했습니다. 감사. –

+0

방금이 문제가 발생했습니다. 이 작업을 수행하고 목록에서 상속받을 수있는 방법이 있습니까? 이 대답은 잘 작동하지만, 내가 찾고있는 해결책보다는 해결 방법입니다. 제 경우에는 이미 [XmlRoot] 특성으로 표시되어있는 사용자 지정 (비 프리미티브) 형식의 목록이므로 serializer가 List 클래스를 고려하지 않을 때 놀랐습니다. – si618

+0

@Si :'XmlRootAttribute'는 당신이 생각하는 것처럼 보이지 않습니다. 이 클래스는 독자적으로 클래스를 직렬화 할 때만 루트 요소 (AKA 문서 요소)의 이름을 제어합니다. 아마도 당신은'XmlTypeAttribute'를 찾고 있습니까? – Aaronaught

0

List에서 직접 상속해야하므로 주어진 답이 항상 정상적인 것은 아닙니다. 나는 비슷한 질문을 올렸고이 대답 Change XmlElement name for XML serialisation에 대한 지시를 받았다.

관련 문제