我得到这个XML作为对rest调用的响应。原来的列表可以重新填充,但是CollectorDate类中的列表的所有属性都返回null。我该如何正确对它进行反序列化?
<CollectorHeardMIUs>
<CollectorDate Date="2018/07/16" CollectorId="11090_5000">
<CollectorLatitude></CollectorLatitude>
<CollectorLongitude></CollectorLongitude>
<Miu MiuId="1461860710">
<PremiseID>859869749</PremiseID>
<PremiseAccount>Unknown</PremiseAccount>
<PremiseLatitude>39.31553</PremiseLatitude>
<PremiseLongitude>-84.608627</PremiseLongitude>
</Miu>
<Miu MiuId="1478541235">
<PremiseID>859251478</PremiseID>
<PremiseAccount>Unknown</PremiseAccount>
<PremiseLatitude>39.36231</PremiseLatitude>
<PremiseLongitude>-84.54222</PremiseLongitude>
</Miu>
</CollectorDate>
<CollectorDate Date="2018/07/17" CollectorId="11090_5000">
<CollectorLatitude></CollectorLatitude>
<CollectorLongitude></CollectorLongitude>
<Miu MiuId="1461860710">
<PremiseID>859869749</PremiseID>
<PremiseAccount>Unknown</PremiseAccount>
<PremiseLatitude>39.31553</PremiseLatitude>
<PremiseLongitude>-84.608627</PremiseLongitude>
</Miu>
</CollectorDate>
</CollectorHeardMIUs>
<CollectorHeardMIUs>
<CollectorDate Date="2018/07/16" CollectorId="11090_5000">
<CollectorLatitude></CollectorLatitude>
<CollectorLongitude></CollectorLongitude>
<Miu MiuId="1461860710">
<PremiseID>859869749</PremiseID>
<PremiseAccount>Unknown</PremiseAccount>
<PremiseLatitude>39.31553</PremiseLatitude>
<PremiseLongitude>-84.608627</PremiseLongitude>
</Miu>
</CollectorDate>
<CollectorDate Date="2018/07/17" CollectorId="11090_5000">
<CollectorLatitude></CollectorLatitude>
<CollectorLongitude></CollectorLongitude>
<Miu MiuId="1461860710">
<PremiseID>859869749</PremiseID>
<PremiseAccount>Unknown</PremiseAccount>
<PremiseLatitude>39.31553</PremiseLatitude>
<PremiseLongitude>-84.608627</PremiseLongitude>
</Miu>
</CollectorDate>
</CollectorHeardMIUs>
这是我的课程:
public class CollectorDate
{
public string Date { get; set; }
public string CollectorId{ get; set; }
public decimal? CollectorLatitude { get; set; }
public decimal? CollectorLongitude { get; set; }
public List<Miu> Miu { get; set; }
}
public class Miu
{
public string MiuId { get; set; }
public string PremiseID { get; set; }
public string PremiseAccount { get; set; }
public decimal? PremiseLatitude { get; set; }
public decimal? PremiseLongitude { get; set; }
}
还有我的RestSharp方法:
static List<CollectorDate> GetCollectorHeardMius(string token, DateTime startdt, DateTime enddt, string collectorId)
{
var client = new RestClient(ConfigurationManager.AppSettings.Get("ApiURL"));
var request = new RestRequest("collector_heard_mius");
request.AddParameter("token", token);
request.AddParameter("site_id", ConfigurationManager.AppSettings.Get("SiteId"));
request.AddParameter("start_date", startdt.ToString("yyyy/MM/dd"));
request.AddParameter("end_date", enddt.ToString("yyyy/MM/dd"));
request.AddParameter("collector_id", collectorId);
var response = client.Execute<List<CollectorDate>>(request);
return response.Data;
}
我尝试为CollectorHeardMIUs的根元素添加一个类,该类仅包含List CollectorDate的单个属性,但返回具有所有空属性的List。
我认为问题在于没有一个单独的CollectorDate和Miu列表的命名标签,但我不知道如何处理。
答案 0 :(得分:0)
您无法使用此代码获取root元素:
所以我已经创建了一个测试应用程序,并且已经过测试
所以只需附加它,然后反序列化它并检查我的模型
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//I am simply loading data From this file you can simply replace with data which are getting from rest Api
string data = File.ReadAllText("D:\\xml.txt");
string appender = "<root>" + data + "</root>";
XmlSerializer xmldata = new XmlSerializer(typeof(Root));
byte[] byteArray = Encoding.ASCII.GetBytes(data);
MemoryStream stream = new MemoryStream(byteArray);
object datafromXml = xmldata.Deserialize(stream);
}
}
[XmlRoot(ElementName = "Miu")]
public class Miu
{
[XmlElement(ElementName = "PremiseID")]
public string PremiseID { get; set; }
[XmlElement(ElementName = "PremiseAccount")]
public string PremiseAccount { get; set; }
[XmlElement(ElementName = "PremiseLatitude")]
public string PremiseLatitude { get; set; }
[XmlElement(ElementName = "PremiseLongitude")]
public string PremiseLongitude { get; set; }
[XmlAttribute(AttributeName = "MiuId")]
public string MiuId { get; set; }
}
[XmlRoot(ElementName = "CollectorDate")]
public class CollectorDate
{
[XmlElement(ElementName = "CollectorLatitude")]
public string CollectorLatitude { get; set; }
[XmlElement(ElementName = "CollectorLongitude")]
public string CollectorLongitude { get; set; }
[XmlElement(ElementName = "Miu")]
public List<Miu> Miu { get; set; }
[XmlAttribute(AttributeName = "Date")]
public string Date { get; set; }
[XmlAttribute(AttributeName = "CollectorId")]
public string CollectorId { get; set; }
}
[XmlRoot(ElementName = "CollectorHeardMIUs")]
public class CollectorHeardMIUs
{
[XmlElement(ElementName = "CollectorDate")]
public List<CollectorDate> CollectorDate { get; set; }
}
[XmlRoot(ElementName = "root")]
public class Root
{
[XmlElement(ElementName = "CollectorHeardMIUs")]
public List<CollectorHeardMIUs> CollectorHeardMIUs { get; set; }
}
}