2010-07-29 67 views
0

我正在使用WebClient從URI讀取wsdl。如何從wsdl動態創建代理時擺脫XmlIgnoreAttribute()?

WebClient client = new WebClient(); 
Stream wsdlStream = client.OpenRead(wsdlURI); 
ServiceDescription wsdl = ServiceDescription.Read(wsdlStream); 

然後我設置命名空間和CompileUnit和使用ServiceDescriptionImporter的GenerateCodeFromCompileUnit方法生成的.cs類文件。

然後我編譯程序集並使用反射來調用方法。問題是,我創建的.cs文件具有其他xml屬性。而附加參數,如:

public void Calc(int a, [System.Xml.Serialization.XmlIgnoreAttribute()] bool aSpecified 

當我從這個源文件中創建組件,我得到更多的參數的方法,比他們應該有。原來的方法是這樣的:

public int Calc(int a, int b) 

和方法生成的源代碼如下所示:

public int Calc(int a, bool aSpecified, int b, bool bSpecified, out int CalcResult, out bool CalcResultSpecified) 

我怎樣才能動態生成的源文件,而無需這些額外的參數?所以我可以將它編譯爲程序集並使用反射來調用原始方法?

回答

0

被忽略的字段在那裏,因爲原始WSDL指定了一些參數作爲可選的值類型,而XmlSerializer不支持可空<T>,所以xxxSpecified參數允許您告訴它該值是否爲無論是否爲空。猜猜你被困在他們身上。

+0

感謝您的回覆,但正如你所說...我堅持與他們。 :X – solar 2010-07-30 08:17:49

+0

卡住了,你必須處理它們;你不能擺脫它們,所以你只需要在你的反射調用中編寫代碼來處理它們,就像你對真實參數所做的那樣。這真的不是什麼大問題。 – tomasr 2010-07-30 14:03:22