0

내가 예에 대한 주목할만한 점은 "네임 스페이스"한정자 현실에서 "의 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> 

내가 어떤 옵션이 있습니까?

+0

글쎄, XML을 처리하는 데 사용하는 도구에 따라 다릅니다. 당신이 준 유일한 단서는 질문 태그를 선택하는 것입니다. –

+0

C# 및 기본 제공 XmlSerializer를 사용하고 있습니다. – MrCC

+0

그렇다면 미안하지만, 나는 그 도구에 대한 전문가가 아닙니다. –

답변

0

큰 "XML"이 주어졌습니다. 탈 직렬화하기 전에 XML 변환을 사용하여이를 수정할 수있었습니다.