보안 공급 업체 서비스와 통신하는 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)}