내가 예에 대한 주목할만한 점은 "네임 스페이스"한정자 현실에서 "의 xmlns"해야한다는 것입니다의 xmlns
<?xml version="1.0" encoding="utf-8"?>
<Data namespace="http://example.com/data">
...
</Data>
과 같이 UTF-8로 인코딩 된 XML 메시지로 서버로부터 데이터를 수신 네임 스페이스 resilency 한정자는 기본 XML 네임 스페이스를 지정합니다. serialization/deserialization을위한 코드는 스키마 정의 파일에서 (자동) 생성되었으며 xsd와 함께 제공된 설명서는 이것이 버그라는 것을 거의 확인합니다.
그러나,이 또한 데이터 객체가 이제 글로벌/빈 공간에 살고 있다는 것을 의미 (의 xmlns = "")와 자동 생성 된 코드는 XmlSerialzier 사람들이 볼 직렬화 복원시에 throw하는 예외의 전형적인 "There is an error in XML document ..."
및 "<Data xmlns=''> was not expected."
종류의 실패 deserialization 속성/코드 및 XML 문서의 네임 스페이스가 일치하지 않는 경우
자동 생성 된 코드와 "핫픽스"를 수정하는 것이 매우 쉽지만, Namespace
의 정의는 예를 들어. 미래의 어떤 시점에서 문제가 나에게 데이터를 제공하는 사람에 의해 고정되어있는 경우이며, 나는 적응하도록 강요하지 않으 -
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Data {
내가 정말 원하는 것은 네임 스페이스 resilency입니다 Namespace
의 정의가 다시 코드에 포함됩니다 (xmlns가 변경되면 앞에서 설명한 예외가 발생하여 역 직렬화 코드가 손상됩니다).
즉, 위의 XML과 위의 두 XML을 모두 처리 할 수있는 코드가 필요합니다.
<?xml version="1.0" encoding="utf-8"?>
<Data xmlns="http://example.com/data">
...
</Data>
하거나 (예를 들어, 그들은 "호환"이동하기로 결정한 경우)
<?xml version="1.0" encoding="utf-8"?>
<Data xmlns="http://example.com/data" namespace="http://example.com/data">
...
</Data>
내가 어떤 옵션이 있습니까?
글쎄, XML을 처리하는 데 사용하는 도구에 따라 다릅니다. 당신이 준 유일한 단서는 질문 태그를 선택하는 것입니다. –
C# 및 기본 제공 XmlSerializer를 사용하고 있습니다. – MrCC
그렇다면 미안하지만, 나는 그 도구에 대한 전문가가 아닙니다. –