일부 3GPP XSD (여러 XSD 파일/네임 스페이스)에서 일부 C# 클래스를 생성했으며 하나의 클래스 대체 그룹에서 사용되는 추상 유형의 구체적인 인스턴스에 대한 문제점.xsd.exe에서 직렬화 된 XML이 대체 그룹을 사용하여 생성 된 코드가 유효하지 않습니다 (잘못된 xsi : 유형 오류)
첫째, 스키마의 관련 부분 :
(genericNrm.xsd가)
이<element name="ManagedElement">
<complexType>
<complexContent>
<extension base="xn:NrmClass">
<sequence>
...
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xn:IRPAgent"/>
<element ref="xn:ManagedElementOptionallyContainedNrmClass"/>
<element ref="xn:VsDataContainer"/>
</choice>
</sequence>
</extension>
</complexContent>
</complexType>
</element>
<element
name="ManagedElementOptionallyContainedNrmClass"
type="xn:NrmClass"
abstract="true"
/>
가
이 (eutran.xsd)
<element name="ENBFunction" substitutionGroup="xn:ManagedElementOptionallyContainedNrmClass">
<complexType>
<complexContent>
<extension base="xn:NrmClass">
<sequence>
<element name="attributes" minOccurs="0">
<complexType>
<all>
<element name="userLabel" type="string" minOccurs="0"/>
... etc
이 간단한 ManagedElement에서 직렬화 된 XML이 포함로 ENB 기능 :
<ManagedElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="1234" xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.625#genericNrm">
<ManagedElementOptionallyContainedNrmClass xmlns:q1="http://www.3gpp.org/ftp/specs/archive/32_series/32.765#eutranNrm" xsi:type="q1:ENBFunction" id="1234">
<q1:attributes>
<q1:userLabel>label</q1:userLabel>
</q1:attributes>
</ManagedElementOptionallyContainedNrmClass>
</ManagedElement>
내장 된 Visual Studio XML 유효성 검사에서 "This is invalid xsi : type 'http://www.3gpp.org/ftp/specs/archive/32_series/32.765#eutranNrm:ENBFunction'이라는 요소에 대해 불만을 토로합니다.
그래서 직렬화 된 XML이 잘못 되었습니까? 아니면 유효성 검사입니까? 별도의 네임 스페이스와 관련이 있습니까?
XML을 올바르게 deserialize 할 수 있지만 생성 된 XML이 스키마를 변경하지 않고 스키마를 준수해야합니다. 내가 수동으로 다음에 XML을 변경하는 경우, 오류가 사라 발견 (나는 쉽게도 읽을 찾기) :
<ManagedElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="1234" xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.625#genericNrm">
<q1:ENBFunction xmlns:q1="http://www.3gpp.org/ftp/specs/archive/32_series/32.765#eutranNrm" id="1234">
<q1:attributes>
<q1:userLabel>label</q1:userLabel>
</q1:attributes>
</q1:ENBFunction>
</ManagedElement>
나는 출력이이 방법에 시리얼을 강제 할 수 있습니까? 보고에 대한
감사합니다 ...
XML Serializer가이 복잡한 것을 처리하도록 해 주셔서 감사합니다. LINQ to XML을 사용하거나 자신 만의 귀찮은 클래스 중 일부가'IXmlSerializable'을 구현하고 "손으로"처리하는 것이 더 좋을 수도 있습니다. " –
감사합니다. 내 옵션을 고려 중이나 압력을 받고 있습니다. 신속하게 뭔가를 얻을 수 있습니다. 나는 xsi와 관련된 오류에 대해 혼란 스럽다 : 솔직히 말해서 - 이것은 잘못 사용 된 XML이다 (그것은 나에게 유효 해 보인다)? – zeroid