我正在研究與第三方Soap服務交談的Windows Phone 7應用程序。我使用Add Service Reference
來生成wsdl代理類。一些電話工作,但某些呼出電話,讓使用「sObject
」類結果的"The type System.Xml.Linq.XElement was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically"
在使用具有XmlAnyElementAttribute的服務參考代理時未聲明XElement
中的sObject類的相關部分定義的錯誤(如自動生成)
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:sobject.partner.soap.sforce.com")]
public partial class sObject : object, System.ComponentModel.INotifyPropertyChanged {
<snipped ....>
[System.Xml.Serialization.XmlAnyElementAttribute(Namespace="urn:sobject.partner.soap.sforce.com", Order=3)]
public System.Xml.Linq.XElement[] Any {
get {
return this.anyField;
}
set {
this.anyField = value;
this.RaisePropertyChanged("Any");
}
}
我使用的代碼創建的sObject:
sObject post = new sObject();
XElement postEls = new XElement("sObject",
new XElement("Type", "TextPost"),
new XElement("ParentId", userInfo.userId),
new XElement("Body", postBody)
);
post.Any = postEls.Elements().ToArray();
步驟我都試過:
將[System.Xml.Serialization.XmlInclude(typeof(System.Xml.Linq.XElement))]
添加到sObject類。同樣的錯誤,似乎這應該起作用。
將[System.Xml.Serialization.XmlElement()]
添加到Any屬性中。當我做這個消息是序列化的,但是 - 作爲expected-不正確的(在任何元素不應該出現,我們的目標僅僅是XElements []作爲輸出)
<sObject>
<type xmlns="urn:sobject.partner.soap.sforce.com">FeedPost</type>
<Id xsi:nil="true" xmlns="urn:sobject.partner.soap.sforce.com" />
<Any xmlns="urn:sobject.partner.soap.sforce.com">
<Type xmlns="">TextPost</Type>
</Any>
<Any xmlns="urn:sobject.partner.soap.sforce.com">
<ParentId xmlns="">XXXXXX</ParentId>
</Any>
<Any xmlns="urn:sobject.partner.soap.sforce.com">
<Body xmlns="">Test post from WP7!</Body>
</Any>
</sObject>
順便說一句,我懷疑這是相關的,從第三方服務返回入口sObjects的調用將其Any屬性設爲null,儘管數據在RPC響應中存在。
喬治,用這些數據編輯您的原始問題,而不是添加不是答案的「答案」。這不是一個討論論壇。 – 2010-10-07 15:51:04
約翰,我已將格式化爲答案。 – 2010-10-07 17:13:52