Web サービスから受信した XML 応答を逆シリアル化する際に問題が発生しています。応答は次のようになります。
<CreateSubscribersResultCollection xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<CreatedSubscriberIds xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:long>206464306</a:long>
<a:long>306664316</a:long>
</CreatedSubscriberIds>
<FailedCreatedSubscribers xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</CreateSubscribersResultCollection>
XML を逆シリアル化するために使用するコードは次のようになります。
internal T GetQueuedResults<T>(string url)
{
WebRequest request = GetRequestObject(url, "GET");
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var responseStream = httpResponse.GetResponseStream())
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
var response = (T)xmlSerializer.Deserialize(responseStream);
return response;
}
}
逆シリアル化すると ( type を渡すCreateSubscribersResultCollection
) 、エラーはまったく発生しません。代わりに、CreatedSubscriberIds
の長さは0
. エラーがクラスの設計方法にあることは確かですが、エラーの原因がわかりCreateSubscribersResultCollection
ません。クラスは次のようになります。
[DataContract]
public class CreateSubscribersResultCollection : RequestBase
{
[XmlArray("CreatedSubscriberIds")]
[XmlArrayItem(typeof(long))]
public List<long> CreatedSubscriberIds { get; set; }
[XmlElement("FailedCreatedSubscribers")]
public string FailedCreatedSubscribers { get; set; }
}
クラスをインスタンス化してシリアル化すると、デバッグ目的で次の結果が得られます。
<CreateSubscribersResultCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CreatedSubscriberIds>
<long>206464306</long>
<long>306664316</long>
</CreatedSubscriberIds>
<FailedCreatedSubscribers />
</CreateSubscribersResultCollection>
私が間違っていることを知っている誰かがそこにいることを願っています。私はこれに対してあまりにも長い間頭を悩ませてきましたが、Google は私を助けてくれませんでした.