2010-10-07 48 views
1

我正在研究與第三方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響應中存在。

回答

1

原來,例外的XElement [],目前的問題在Windows Phone上的序列化是由於7

至於維傑維爾馬here,在平臺上的注意事項狀態XmlSerializer.Serialize鏈接的MSDN文章指出:

Silverlight的用於Windows電話: 如果XmlSerializer對象與包含類型的XElement的對象的陣列的類型參數初始化該XmlSerializer.Serialize方法引發InvalidOperationException。

Vijay列出了使用單個XElement和單獨解析字段的解決方法。如果您控制SOAP消息的雙方,這將工作。不幸的是,我不這麼說,第三方的要求是無效的。

這解釋了XElement的InvalidOperationException並不是預期的,儘管不是我希望的答案。希望它能幫助可能控制服務雙方的其他人。

+0

喬治,用這些數據編輯您的原始問題,而不是添加不是答案的「答案」。這不是一個討論論壇。 – 2010-10-07 15:51:04

+0

約翰,我已將格式化爲答案。 – 2010-10-07 17:13:52