저는 Windows Store 응용 프로그램을 작성 중입니다. SOAP 메시지의 세부 사항 비 직렬화
나는 다음과 같은 수동으로 만든 오류 클래스가 있습니다<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><env:Fault><faultcode>env:Server</faultcode><faultstring>internal error</faultstring><detail><ns2:InnerException xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ns1.my.namespace.com" xmlns:ns2="http://my.namespace.com" xmlns:ns3="http://ns3.my.namespace.com"><message>internal error</message></ns2:InnerException ></detail></env:Fault></env:Body></env:Envelope>
내가 그것을 같다 읽으려고 오전 방법 :
[XmlRoot(Namespace = "http://schemas.xmlsoap.org/soap/envelope/", ElementName = "Fault")]
public partial class SoapFault
{
[XmlElement(Form = XmlSchemaForm.Unqualified, ElementName = "faultcode")]
public String FaultCode { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified, ElementName = "faultstring")]
public String FaultDescription { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified, ElementName = "detail")]
public InnerException[] Detail { get; set; }
}
[XmlType(Namespace = "http://my.namespace.com", TypeName = "InnerException")]
public partial class InnerException
{
[XmlElement(Form = XmlSchemaForm.Unqualified, ElementName = "message")]
public String Message { get; set; }
}
이 내가 읽으려고하고있는 서버의 응답입니다 다음과 같습니다 :
using (XmlReader reader = XmlReader.Create(await response.Content.ReadAsStreamAsync()))
{
string SoapNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
try
{
var serializer = new XmlSerializer(typeof(SoapFault));
reader.ReadStartElement("Envelope", SoapNamespace);
reader.ReadStartElement("Body", SoapNamespace);
var fault = serializer.Deserialize(reader) as SoapFault;
reader.ReadEndElement();
reader.ReadEndElement();
}
catch(Exception ex)
{
throw new Exception("Exception was thrown:" + ex.Message);
}
}
XmlElement 특성을 변경하면 네임 스페이스를 추가하려했지만 항상 끝납니다. SoapFault의 Detail 속성이 NULL로 설정됩니다. 개체를 형식을 변경할 때 적어도 데이터가 들어있는 XmlNode 집합을 가져옵니다.
직렬화에서 올바른 클래스를 구현하려면이 코드에서 무엇을 변경해야합니까?
참고 : 저는 불행히도 전화를 수동으로 만들어야하며 자동 생성 코드를 사용할 수 없습니다.
, 2 단계 이상에서 2 파일이 생성 된 경우 모두 xsd에 인수로 나열해야 할 수 있습니다. ** xsd ** * reply.xsd * * reply_app1.xsd * * reply_app2.xsd * ... etc – mungflesh
당신은 생명을 구하는 사람입니다 – Yiping