2010-04-23 2 views
1

은 내가 Xsd2Code 사용하는 C#을 객체를 생성 한 타사에서 스키마가 (xsd.exe 같은 다른 옵션을 XMLSPY 등 중 하나가 추락 또는 일을 자신의 라이브러리를 필요한 코드의 40메가바이트 분출)XmlSerializer가 여러 네임 스페이스의 특성을 deserialize 할 수 있습니까?

어쨌든을,

[XmlType(Namespace="something")] 
[XmlRoot("someType", Namespace="something", IsNullable=false)] 
public partial class SomeType { 
    public string Element1 { get; set; } 

    [XmlElement(Namespace="somethinelse")] 
    public string Element2 { get; set; } 
} 

예 XML 스키마 말했다 사용 :

<xsd:schema xmlns:ns1="something" xmlns:ns2="somethinelse" targetNamespace="something"> 

    <xsd:complexType name="someType"> 
    <xsd:sequence> 
     <xsd:element ref="element1" /> 
     <xsd:element ref="ns2:element2" /> 
    </xsd:sequence> 
    </xsd:complexType> 

</xsd:schema> 

생성 된 래퍼 클래스는 다음과 같습니다 : 여기 스키마에서 문제 요소의 예

,536,
<someType> 
    <element1>SomeValue</element1> 
    <ns2:element2>SomeValue2</element2> 
</someType> 

(오류는 필자가 입력 한 것입니다. 스키마가 유효하고 변경 불가능)

이제 문제가 발생했습니다. 이렇게하면 XML을 deserialize하려고 할 때 :

XmlSerializer ser = new XmlSerializer(typeof(SomeType)); 
XmlReader reader = XmlReader.Create(new StringReader(xmlString)) 
SomeType obj = (SomeType)ser.Deserialize(reader) 

생성 된 개체가 올바르게 serialize되고 필요한 요소에 "ns2"가 추가됩니다. 그러나 deserialize 할 때 element1이 설정되고 element2는 null로 남습니다.

답변

0

우리가 제공 한 샘플 데이터에는 네임 스페이스에 타입 변환이되어 잘못 직렬화되었습니다. 그림을 이동.

관련 문제