루트 요소가 다른 여러 XML 파일을 가지고 있지만 동일한 유형의 자식 요소가 있고 다른 루트 요소를 보유하는 하나의 클래스를 만들고 싶습니다. 각 하위 요소를 보유합니다. 다음은 XML 파일의 모양을 보여주는 두 가지 예입니다.(De) 하나의 클래스를 사용하여 다른 루트 요소 이름을 직렬화
파일 1 :
<?xml version="1.0" encoding="utf-8" ?>
<Sandra>
<Address>
<Street></Street>
<Number></Number>
</Address>
</Sandra>
파일 2 :
나는 모두 직렬화 할 수와 같은 단지 2 클래스를 사용하여이를 직렬화하는<?xml version="1.0" encoding="utf-8" ?>
<John>
<Address>
<Street></Street>
<Number></Number>
</Address>
</John>
:
[Serializable]
[XmlRoot]
public class Person
{
[XmlElement("Address")]
public List<Address> Adresses { get; set; }
}
[Serializable]
public class Address
{
public string Street { get; set; }
public string Number { get; set; }
}
I 다음을 사용하여 읽으려고했습니다 :
var ser = new XmlSerializer(typeof(Person));
var reader = XmlReader.Create("person1.xml");
var person = (Person)ser.Deserialize(reader);
디시리얼라이저가 <"Person">
루트 요소를 필요로하고 <"John">
또는 <"Paul">
이 아니기 때문에 "There is an error in XML document (2, 2)."
이 표시됩니다. 내가 [XmlRoot]
에서 [XmlRoot("John")]
으로 변경하면 문제가 없지만 정확히 여기서 피하려고합니다.
또한 동일한 이상한 XML 구조를 사용하여 다시 직렬화 할 수 있어야하므로 Person 클래스 내에 루트 요소 이름을 저장해야합니다.
필자 만의 (비) 시리얼 라이저를 만들 수는 있지만 기존 방법을 사용하여 구현할 수 있는지 알고 싶습니다.
편집 1 : (롤백 됨).
편집 2 : "편집 1"의 수정본은 필자가 원하는 것을 얻기위한보다 간단한 방법을 찾은 후 롤백되었습니다. 아래 내 대답을 참조하십시오.
그래, 그것은 참으로, 좀 이상해. 그러나 XML 구조를 변경하는 것이 아닙니다.이 형식을 읽고 읽고 작성해야합니다. –