2009-11-11 72 views
0



我開發.NET 3.5中WCF框架服務和託管他們的IIS 5.1的Windows XP SP3與basicHttpBiding

在.net 2.0框架中開發的服務客戶端。爲此我使用WSDL.EXE生成代理客戶端。該工具生成代理類,沒有任何問題,但它增加了對每個屬性的問題,增加了額外的屬性「[屬性]指定」,但沒有任何問題做工精細,只需要指定「規定=真正的」分配時價值到任何屬性


要刪除此額外的屬性,我添加了XmlSerializerFormat attribe以及ServiceContract屬性。 WSDL.EXE生成沒有額外屬性的類,,但不包括之前包含的某些類

是否有我需要設置來生成排除類的任何屬性?

注意:所有合同類別歸於DataContract以及屬性DataMemeber


NRK使用WSDL不匹配的的ServiceContract生成WCF代理客戶端,XmlSerializerFormat屬性

回答

3

XmlSerializer使用XmlIncludeAttribute而不是KnownTypeAttribute來發現未包含在操作合同中的子類型。所以,你可以嘗試將其添加到基類:

[XmlInclude(typeof(ChildClass1))] 
[XmlInclude(typeof(ChildClass2))] 
public class BaseClass {} 
+0

感謝Darin,我按照你的指示做了,它很有效。 :) – nRk 2009-11-11 08:48:25

1

標準WCF的DataContractSerializer將序列一切標有[DataMember] - 無論.NET知名度(公共/保護/私營/內部)。

當您切換到XmlSerializerFormat時,行爲會發生變化 - 現在XmlSerializer會將所有具有public可見性並且沒有[XmlIgnore]標記的東西序列化。

我會假設你的一些類和成員都沒有標明public,因此沒有得到了序列化。此外,XmlSerializer需要類有一個明確的,無參數的構造函數,將用於反序列化 - 所有的類都有嗎?當然,這個構造函數也需要是public

+0

感謝馬克,當你指定的所有屬性都具有公共和具有默認構造函數。問題來了,我需要返回一個方法是基類,它由8個子類繼承,但我只有4個代理。所有繼承的類都是公共/默認構造函數,所有屬性都是公共的。所有使用DataContract裝飾的類以及使用DataMember進行裝飾的屬性均可使用。 – nRk 2009-11-11 05:48:37

+0

如果您使用的是XmlSerializer,則DataContract/DataMember屬性在這裏無關緊要。你的8個子類是否在操作合同的'[KnownType]'屬性中定義的某個地方?我會認爲只有那些具體提到的作爲操作中的參數,或通過已知類型的屬性,將被序列化 – 2009-11-11 06:18:46

+0

感謝您的幫助。 對不起,我忘了提及,在基類中我添加了屬性[KnownType(typeof(childclass))],我爲每個子類添加了8個屬性。 – nRk 2009-11-11 06:21:49

相關問題