Я работаю над приложением Windows Phone 7, которое общается со сторонним сервисом Soap.Я использовал 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"
Соответствующая часть класса 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.Когда я сделал это, сообщение было сериализовано, но, как и ожидалось, некорректно (элементы Any не должны быть там, цель - просто 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>
В целом, я подозреваюэто связано с тем, что вызовы, которые возвращают sObject-ы, входящие из сторонней службы, имеют свойство Any со значением NULL, несмотря на данные, присутствующие в ответе RPC.