2011-12-02 4 views
2

타사 도구의 XML 파일을 사용자 정의 소프트웨어 클래스로 deserialize하려고합니다. 문제는 "루트"항목이 실제로 컬렉션의 선언이기 때문에 XML이 조금 어리석은 것입니다. 직렬화를 정의하기 위해 XMLArray와 다른 정의를 많이 했었지만 이것이 효과가없는 것 같습니다. 내가 할 수 있었던 최선의 방법은 컬렉션을 읽도록하는 것이지만 콜렉션의 어떤 것도 변수로 초기화하지 않는다. 여기 루트 수준의 콜렉션에서 XML 객체 직렬화

내가 직면하고 무엇의 예입니다

XML :

<Animals> 
    <Animal> 
    <Name>Mr. Cow</Name> 
    <Type>Cow</Type> 
    </Animal> 
    <Animal> 
    <Name>Belle</Name> 
    <Type>Cow</Type> 
    </Animal> 
    <Animal> 
    <Name>Porky</Name> 
    <Type>Pig</Type> 
    </Animal> 
</Animals> 

그때 내 XMLRoot 내 "농장"개체에서 "동물"로 정의했다. 그리고 "Animal"클래스에 대한 목록 속성이 있습니다. 해당 속성 (목록 AnimalCollection)을 정의하면 얻을 수있는 최선의 방법은 3 개의 초기화되지 않은 Animal 개체 (아무 값도 설정되지 않음) 목록입니다.

사무실 주변에서 우리가 할 수있는 최선의 방법은 파일을 직렬화하기 전에 노드를 파일로 추가하고 비즈니스를 평소대로 사용하는 것이었지만 분명히 이것은 끔찍한 해킹처럼 보였습니다. 내가 누락 된 더 나은 방법이 있다고 생각하니.

나는 수동으로 문서를 읽는 것에 대해서도 생각했다. 그러나 다시 한 번 우아한 방법이 있기를 바란다.

답변

3
XmlSerializer serializer = new XmlSerializer(typeof(Animal[]), new XmlRootAttribute("Animals")); 

public class Animal 
{ 
    [XmlElement] 
    public string Name; 
    [XmlElement] 
    public string Type; 
} 
+0

또 다른 옵션입니다. 왜 그렇게 생각하지 않았는지 확실하지 않습니다. 나는 누군가가 이것을 훨씬 쉽게 허용하는 XML 태그를 알고있는 경우에 대비해 이것을 열어 둘 것이지만 이것은 분명히 효과가있을 것이다. 감사! (이미 +1) – RiddlerDev