繁体   English   中英

无法使用RestSharp反序列化XML中的多个列表

[英]Unable to Deserialize multiple list in XML with RestSharp

我得到这个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列表的命名标签,但我不知道如何处理它。

您无法使用此代码获取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; }
        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM