簡體   English   中英

svcutil生成的代碼需要xmlinclude

[英]svcutil generated code needs xmlinclude

我正在使用WCF在VB NET中開發一個控制台應用程序,該應用程序可與安全的供應商服務進行通信。 我想序列化請求和調用的響應,並將它們存儲在XML文件中進行分析。 不幸的是,我要序列化的對象很復雜。 它基於SVCUTIL從供應商提供的WSDL和xsd文件生成的類。

這是我編寫的代碼(obj是復雜對象):

Dim sr As StreamWriter
Dim x As XmlSerializer

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

當我點擊Serialize方法時,我收到帶有InnerException消息的InvalidOperationException:'預期的類型不是[生成的類名]。 使用XmlInclude或SoapInclude屬性來指定靜態未知的類型。

如前所述,這只是SVCUTIL生成並合並到我的應用程序中的幾個類之一。 有沒有辦法讓SVCUTIL為所有這些類發出XMLInclude屬性? WSDL可能會受到供應商的更改,因此我不希望再次為所有這些類手動添加屬性。

SVCUTIL為每個類生成的屬性通常如下所示:

<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")>

這是我當前用於生成代理類的命令:

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

我將選項/ ImportXMLTypes / SER:XMLSerializer添加到上述命令中,而生成的代理類沒有任何變化。

該線程討論svcutil的/ reference選項。 我不知道這是否有幫助,我不確定為路徑指定什么。 該參考文獻表明/ reference不能解決我的XMLSerializer問題。

這是另一個似乎很重要的話題。 任何指導當然將不勝感激。


我發現此線程確實幫助我最終解決了序列化程序問題! 現在它就像一種魅力。 基本上,您需要做的就是使用extraTypes參數調用序列化程序方法,如下所示:

x = New XmlSerializer(obj.GetType, extraTypes)

ExtraTypes是一個類型數組,由於所有類型都包含在SVCUTIL創建的代理類中,因此我能夠輕松構建它們。

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

使用xmlserializer方法的extraType參數。 查看原始帖子中包含的更新評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM