타사 서버의 wsdl이 있습니다. 란 svcutil 및 세트의 끝났다XmlSerializer 디시리얼라이시 오류
방법. 각 메서드에 대한 응답/요청 개체를 설명하는 별도의 100 페이지 pdf가 있습니다.
제 생각에는 웹 메서드를 래핑하고 XmlSerializer를 사용하여 강력한 형식의 개체를 반환했습니다. 반환 된 XML은 다음과 같습니다 (나는 비누 헤더를 제거했습니다) :
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ResponseExt"
xmlns="http://www.thirdparty.com/lr/">
<Code>0</Code>
<Message>SUCCESS</Message>
<SessionId>session_token</SessionId>
</Response>
간단한 것으로 보입니다. 클래스를 작성 (문서로부터/와이어 캡쳐)
[XmlRoot("Response")]
//EDIT added XmlType
[XmlType("ResponseExt", Namespace = "http://www.thirdparty.com/lr/")]
public class MyClass {
public string Code {get; set;}
public string Message {get; set;}
public string SessionId {get; set;}
}
처리 시간 :
//XmlNode node = xml from above
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
XmlNodeReader reader = new XmlNodeReader(node);
Myclass myclass = serializer.Deserialize(reader) as MyClass
마지막 줄은 그 내부 예외 메시지 불면 : 지정된 타입이 인식되지 이름 = 'ResponseExt', 네임 스페이스 = 'http://www.thirdparty.com/lr/',에 <Response xmlns=''
>.
나는 시리얼을 행복하게하는 방법을 알아낼 수 없습니다 정확히이 두
XSI 무엇을 의미 : 유형 = "ResponseExt" 의 xmlns = "http://www.thirdparty.com/lr/
을 항상 조언과 포인터가
편집 감사합니다으로
:. 허용 대답 아래
,나는 이것을 발견 할 때까지 여전히 예외를 받고 있었다. 희망을 갖고 누군가에게 시간을 절약 할 것이다. 나는 거꾸로 일하기 시작했다. 전선에서 XML을 캡처했습니다. 올바른 속성으로 생성 된 클래스에 deserialize : 매력처럼 작동합니다. webservice에서 다시 시도 - 예외. 어떤 이유로 XmlSerializer가 ResponseExt를 인식하지 못합니다.
XmlSerializer serializer = new XmlSerializer(typeof(Response));
XmlNode node = (XmlNode)results[0];
XmlDocument doc = new XmlDocument();
doc.LoadXml(node.OuterXml); //reload node
XmlNodeReader reader = new XmlNodeReader(doc.FirstChild); //there is only one node
Response rsp = serializer.Deserialize(reader) as Response; //works
편집 : 기본 문제 wsdl 파일이 완전하지 않습니다. 이틀 동안이 (못생긴) 해결 방법을 찾은 후 타사 공급 업체가 완료된 WSDL (오류없이 비 직렬화하는 모든 유형)을 제공했습니다.
좋아, 내 대답을 업데이트했습니다. – Cheeso