[英]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.