2014-03-27 2 views
0

보안 공급 업체 서비스와 통신하는 WCF를 사용하여 VB NET에서 콘솔 응용 프로그램을 개발 중입니다. 요청과 응답을 모두 직렬화하여 분석을 위해 XML 파일에 저장하려고합니다. 불행히도, 직렬화하려고하는 객체는 복잡합니다. 공급 업체가 제공 한 WSDL 및 xsd 파일에서 SVCUTIL에 의해 생성 된 클래스를 기반으로합니다.svcutil 생성 코드가 필요합니다. xmlinclude

Dim sr As StreamWriter 
Dim x As XmlSerializer 

sr = New StreamWriter("U:\logs\Responses.xml") 
x = New XmlSerializer(obj.GetType) 
x.Serialize(sr, obj) 

I의 직렬화 방법 히트 난의 InnerException 메시지 InvalidOperationException이 얻을 : 여기

은 (복잡한 오브젝트 인 OBJ) I 작성한 코드는 '타입 [생성 된 클래스 이름] 예상하지 못했습니다. 정적으로 알려지지 않은 유형을 지정하려면 XmlInclude 또는 SoapInclude 속성을 사용하십시오. '

앞서 언급했듯이 이것은 SVCUTIL에서 생성되고 내 응용 프로그램에 통합 된 몇 가지 클래스 중 하나입니다. SVCUTIL에서 모든 클래스에 대해 XMLInclude 특성을 생성하는 방법이 있습니까? WSDL은 공급 업체에 의해 변경 될 수 있으며, 필요할 때마다 모든 클래스의 속성을 수동으로 추가해야합니다. 각 클래스는 svcutil에 의해 생성

속성은 일반적으로 다음과 같습니다 : I 옵션/ImportXMLTypes을 추가

svcutil *.wsdl *.xsd /language:vb /async /tcv:Version35 /out:VendorAsync.vb /config:VendorAsync.config 

/:

<System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.0.30319.1"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="[Vendor Specific].xsd")> 

이 내가 프록시 클래스를 생성하기 위해 현재 사용하는 명령은 SER : 생성 된 프록시 클래스에서 변경없이 위의 명령 XMLSerializer.

This thread은 svcutil의/reference 옵션에 대해 설명합니다. 이것이 도움이 될지 모르겠지만 경로를 지정해야할지 모르겠습니다. This reference은/reference가 내 XMLSerializer 문제에 도움이되지 않는다고 제안합니다.

여기에 해당하는 것처럼 보이는 another thread입니다. 모든 지침은 확실히 인정 될 것입니다.


은 정말 나에게 마지막으로 시리얼의 문제를 해결하는 데 도움이 this thread 발견! 그것은 지금 매력처럼 작동합니다. 기본적으로, 당신이 할 필요가 그래서처럼 extraTypes 매개 변수를 사용하여 시리얼 메소드를 호출하는 것입니다

x = New XmlSerializer(obj.GetType, extraTypes) 

ExtraTypes입니다 나는 매우 쉽게 모든 유형이 포함 된 이후 구축 할 수 있었다 유형의 배열 SVCUTIL에 의해 생성 된 프록시 클래스.

Dim extraTypes As Type() = 
    {GetType(type1), 
    GetType(type2), 
    GetType(type3), 
    GetType(type4)} 

답변

0

xmlserializer 메서드의 extraType 매개 변수를 사용합니다. 원래 게시물에 포함 된 업데이트 된 댓글보기