Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用RestSharp反序列化XML中的多个列表_C#_Xml_List_Deserialization_Restsharp - Fatal编程技术网

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

C# 无法使用RestSharp反序列化XML中的多个列表,c#,xml,list,deserialization,restsharp,C#,Xml,List,Deserialization,Restsharp,我得到这个XML作为对rest调用的响应。原始列表返回时填充良好,但是CollectorDate类中的列表对于所有属性返回null。如何正确地将其反序列化 <CollectorHeardMIUs> <CollectorDate Date="2018/07/16" CollectorId="11090_5000"> <CollectorLatitude></CollectorLatitude> <Coll

我得到这个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>

859869749
不为人知
39.31553
-84.608627
859251478
不为人知
39.36231
-84.54222
859869749
不为人知
39.31553
-84.608627
859869749
不为人知
39.31553
-84.608627
859869749
不为人知
39.31553
-84.608627
以下是我的课程:

     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; }

        }
公共类CollectorDate
{
公共字符串日期{get;set;}
公共字符串收集器ID{get;set;}
公共十进制?CollectorLatitude{get;set;}
公共十进制?收集器长度{get;set;}
公共列表Miu{get;set;}
}
公共类Miu
{
公共字符串MiuId{get;set;}
公共字符串PremiseID{get;set;}
公共字符串premiseCount{get;set;}
公共十进制?PremiseLatitude{get;set;}
公共十进制?前提经度{get;set;}
}
我的方法是:

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;
}
静态列表getCollectorHeardMis(字符串标记、DateTime开始时间、DateTime结束时间、字符串collectorId)
{
var client=new RestClient(ConfigurationManager.AppSettings.Get(“apirl”);
var请求=新的重新请求(“收集器”);
AddParameter(“令牌”,令牌);
request.AddParameter(“site_id”,ConfigurationManager.AppSettings.Get(“SiteId”);
request.AddParameter(“开始日期”,startdt.ToString(“yyyy/MM/dd”);
request.AddParameter(“end_date”,enddt.ToString(“yyyy/MM/dd”);
AddParameter(“收集器id”,collectorId);
var response=client.Execute(请求);
返回响应数据;
}
我尝试为CollectorHeardMis的根元素添加一个类,该类只包含List CollectorDate的一个属性,但返回一个包含所有空属性的列表


我认为问题在于CollectorDate和Miu列表没有单独的命名标记,但我不知道如何处理它。

您无法使用以下代码获取根元素:

因此,我创建了一个测试应用程序,并对其进行了测试

所以只需附加它,然后反序列化它,并检查我的模型

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; }
        }

    }
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Xml;
使用System.Xml.Serialization;
名称空间控制台EAPP1
{
班级计划
{
静态void Main(字符串[]参数)
{
//我只是从这个文件加载数据,您只需用从RESTAPI获取的数据替换即可
字符串数据=File.ReadAllText(“D:\\xml.txt”);
字符串appender=“”+数据+”;
XmlSerializer xmldata=新的XmlSerializer(typeof(Root));
byte[]byteArray=Encoding.ASCII.GetBytes(数据);
MemoryStream stream=新的MemoryStream(byteArray);
对象datafromXml=xmldata.Deserialize(流);
}
}
[XmlRoot(ElementName=“Miu”)]
公共类Miu
{
[xmlement(ElementName=“PremiseID”)]
公共字符串PremiseID{get;set;}
[XmlElement(ElementName=“PremiseCount”)]
公共字符串premiseCount{get;set;}
[XmlElement(ElementName=“PremiseLatitude”)]
公共字符串PremiseLatitude{get;set;}
[XmlElement(ElementName=“PremiseColution”)]
公共字符串{get;set;}
[XmlAttribute(AttributeName=“MiuId”)]
公共字符串MiuId{get;set;}
}
[XmlRoot(ElementName=“CollectorDate”)]
公共类集合状态
{
[XmlElement(ElementName=“CollectorLatitude”)]
公共字符串收集器权限{get;set;}
[XmlElement(ElementName=“CollectorLongient”)]
公共字符串收集器长度{get;set;}
[XmlElement(ElementName=“Miu”)]
公共列表Miu{get;set;}
[xmldattribute(AttributeName=“Date”)]
公共字符串日期{get;set;}
[XmlAttribute(AttributeName=“CollectorId”)]
公共字符串收集器ID{get;set;}
}
[XmlRoot(ElementName=“CollectorHeardMis”)]
公共类收集器
{
[xmlement(ElementName=“CollectorDate”)]
公共列表收集器日期{get;set;}
}
[XmlRoot(ElementName=“root”)]
公共类根
{
[XmlElement(ElementName=“CollectorHeardMis”)]
公共列表收集器HeardMius{get;set;}
}
}

XML只能有一个根元素。我需要查看CollectorDate的父类。这是一个数组,您不应该使用需要两级Xml标记的pyt[XmlArray]。请改为使用[XmlElement]。检查我的答案,并让我知道@RealityRelative根节点是CollectorHeardMis。尽管有复数命名,但这不是一个列表。我尝试添加XMLRoot。我为它添加了一个类,只包含一个属性public List CollectorDate{get;set;}和repsonse to var response=client.Execute(request);但这仍然没有;不起作用。在获取响应后,请先参考我的逻辑,在字符串前后追加根,然后反序列化@realityisreprelative我从中获取数据