C# Can';t将XML反序列化为对象

C# Can';t将XML反序列化为对象,c#,.net,xml-serialization,C#,.net,Xml Serialization,我在反序列化从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>

我在反序列化从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>
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;
    }
}
[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>

206464306
306664316

我希望有人知道我做错了什么。我已经在这个问题上绞尽脑汁太久了,而谷歌对我没有任何帮助。

尝试这样指定名称空间:

    [DataContract]
public class CreateSubscribersResultCollection : RequestBase
{
    [XmlArray("CreatedSubscriberIds")]
    [XmlArrayItem(typeof(long), Namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays")]
    public List<long> CreatedSubscriberIds { get; set; }

    [XmlElement("FailedCreatedSubscribers")]
    public string FailedCreatedSubscribers { get; set; }
}
[DataContract]
公共类CreateSubscriberResultCollection:RequestBase
{
[XmlArray(“CreatedSubscriberID”)]
[XmlArrayItem(typeof(long),名称空间=”http://schemas.microsoft.com/2003/10/Serialization/Arrays")]
公共列表CreatedSubscriberID{get;set;}
[XmlElement(“FailedCreatedSubscribers”)]
公共字符串失败CreatedSubscribers{get;set;}
}

确保
GetResponseStream()
中包含数据。要测试,请尝试将其保存到文件中,而不是进行网络连接。将其保存到数据文件并反序列化。如果它被连载,这就是大部分的战斗。如果序列化正确,反序列化应该不会有问题。

您需要指定名称空间。尝试在XmlArrayItem XmlElement属性中添加名称空间。是否尝试使用DataMember属性标记属性?@EmmieGabrielleLewis Lewis,是的,我有,但没有效果。@Reniuz,我知道如何添加名称空间。但是我不能得到想要的结果(看起来像是响应xml)。@sundown看起来你不知道。eyossis写下了我告诉你的,解决了你的问题。responsestream有数据。我也不是第一个序列化数据的人,我从Web服务获取xml。您需要所有用于序列化数据的类。你需要实际的课程和一切。当出现反序列化和问题时,它通常表示递归异常或无数据。确保类协定与数据最初的序列化方式相似。序列化中使用的类应与反序列化期间的类100%相似。在属性和值中也包括[DataMember]。@sundown