XmlSerializer反序列化列表仅获取第一个项目

时间:2015-05-18 09:49:25

标签: c# xml

这是我从API获得的XML:

<?xml version="1.0" encoding="UTF-8"?>

<response>
<datetime>2015-05-18 11:37:32</datetime>
<count>2</count>
<smsleft>40920</smsleft>
<sms><smsid>535041581</smsid><smsid>535041583</smsid></sms>
</response>

这是我的课程,我尝试将其解析为:

[XmlRoot("response")]
public class SMSResponse
{
    [XmlElement("sms")]
    public List<smsid> Sms { get; set; }
}

public class smsid
{
    [XmlElement("smsid")]
    public string SmsID { get; set; }
}

使用此代码:

XmlSerializer serializer = new XmlSerializer(typeof(SMSResponse));
using (TextReader reader = new StringReader(response))
{
   SMSResponse result = (SMSResponse)serializer.Deserialize(reader);
}

但是我只得到结果中列表中的第一个SmsID,而不是响应中的2个。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您已将SmsID声明为string,因此只能对其中一个进行反序列化。您已将Sms声明为列表,但输入文件中只存在一个。

尝试:

[XmlRoot("response")]
public class SMSResponse
{
    [XmlArray("sms")]
    [XmlArrayItem("smsid")]
    public List<string> SmsID { get; set; }
}

答案 1 :(得分:0)

将您的代码更改为此

[XmlRoot("response")]
public class SMSResponse
{
    [XmlElement("sms")]
    public SMS Sms { get; set; }
}

public class SMS
{
    [XmlElement("smsid")]
    public List<string> SmsID { get; set; }
}

答案 2 :(得分:0)

[XmlRoot("response")]
public class SMSResponse
{
    [XmlArray(ElementName = "sms")]
    [XmlArrayItem(ElementName = "smsid", Type = typeof(smsid))]
    public List<smsid> Sms { get; set; }
}

public class smsid
{
    [XmlText]
    public string SmsID { get; set; }
}