2009-10-27 6 views
0

저는 직렬화가 완전히 새롭고 모든 도움을 주시면 감사하겠습니다.XmlArrayItem 중첩 된 항목의 비 직렬화 오류

WSDL.exe를 통해 만든 프록시 클래스에서받은 응답 메시지를 deserialize하는 데 문제가 있습니다. 문제는 내에서 항목을 중첩 한 XmlArrayItem을 사용하고 있다는 사실에 있습니다. 대신지고의

:

<results xmlns="urn:partner.soap.company.com"> 
    <result> 
     <created>false</created> 
     <id>0018000000ZqV8DAAV</id> 
     <success>true</success> 
    </result> 
    <result> 
     <created>false</created> 
     <id>0018000000ZqVMAAA3</id> 
     <success>true</success> 
    </result> 
</results> 

내가 코드에서 다음과 같은 수신하고 있습니다 :

created(0):false 
id(0): false 0018000000ZqV8DAAV 
success(0):false 0018000000ZqV8DAAVtrue 

created(1):false 0018000000ZqV8DAAVtruefalse 
id(1): false 0018000000ZqV8DAAVtruefalse0018000000ZqVMAAA3 
success(1): false 0018000000ZqV8DAAVtruefalse0018000000ZqVMAAA3true 

그것은 무엇을 지우지 않고 응답이 바로 메시지의 다음 부분을 추가 유지 것처럼 나타납니다 전에 갔다.

<System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:partner.soap.company.com")> _ 
Partial Public Class UpsertResult 

    'Public ReturnResponseItems As [ResponseItems] 

    Private createdField As String 

    Private errorsField() As [Error] 

    Private idField As String 

    Private successField As String 

    '''<remarks/> 
    Public Property created() As String 
     Get 
      Return Me.createdField 
     End Get 
     Set(ByVal value As String) 
      Me.createdField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlElementAttribute("errors")> _ 
    Public Property errors() As [Error]() 
     Get 
      Return Me.errorsField 
     End Get 
     Set(ByVal value As [Error]()) 
      Me.errorsField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <XmlElementAttribute(isnullable:=True)> _ 
    Public Property id() As String 
     Get 
      Return Me.idField 
     End Get 
     Set(ByVal value As String) 
      Me.idField = value 
     End Set 
    End Property 

    '''<remarks/> 
    Public Property success() As String 
     Get 
      Return Me.successField 
     End Get 
     Set(ByVal value As String) 
      Me.successField = value 
     End Set 
    End Property 
End Class 

내가 어떤 아이디어 나에 대한 조언을 감사하게 될 것입니다 : (가) 응답을 생성하는 클래스

<System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use:=System.Web.Services.Description.SoapBindingUse.Literal, _ 
    ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Bare)> _ 
    Public Function Provide_Service(<System.Xml.Serialization.XmlElement([Namespace]:="http://www.company.com/connectors/request/129/")> _ 
    ByVal USIUpdates As USIUpdates) As _ 
    <System.Xml.Serialization.XmlArray("results", IsNullable:=False, [Namespace]:="urn:partner.soap.sforce.com"), _ 
    System.Xml.Serialization.XmlArrayItem("result", IsNullable:=False)> UpsertResult() 

     Dim results() As Object = Me.Invoke("Provide_Service", New Object() {USIUpdates}) 
     Return CType(results(0), UpsertResult()) 
    End Function 

그리고 여기에 있습니다 : 여기

웹 서비스를 호출하는 주요 기능입니다 이것을 어떻게 처리 할 것인가.

답변

0

다른 누구에게도이 문제가있는 경우 여기 해결책이 있습니다. 어떤 이유로 WSDL.exe를 실행할 때 XMLArrayItemAttribute가 배열을 포함하는 클래스를 제대로 가리 키지 않았습니다.

따라서, 메인 함수 XMLArrayItemAttribute에 추가 될 필요가 다음

System.Xml.Serialization.XmlArrayItemAttribute("result", IsNullable:=False, Type:=GetType(UpsertResult))

: 다음과 같다

Type:=GetType(UpsertResult)