Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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# XMLSerializer:<;实现异常xmlns=';urn:epcglobal:ale:wsdl:1'&燃气轮机;出乎意料_C#_Xml_Rfid - Fatal编程技术网

C# XMLSerializer:<;实现异常xmlns=';urn:epcglobal:ale:wsdl:1'&燃气轮机;出乎意料

C# XMLSerializer:<;实现异常xmlns=';urn:epcglobal:ale:wsdl:1'&燃气轮机;出乎意料,c#,xml,rfid,C#,Xml,Rfid,我正在尝试反序列化如下所示的XML: XML: <?xml version="1.0" encoding="UTF-8"?> <ns2:ECReports xmlns:ns2="urn:epcglobal:ale:xsd:1" xmlns:ns3="urn:epcglobal:ale:wsdl:1" specName="Cycle_MDEAirport_1" date="2016-04-25T15:06:19.980Z" ALEID="RIFIDI-ALE1158647263

我正在尝试反序列化如下所示的XML:

XML:

<?xml version="1.0" encoding="UTF-8"?>
<ns2:ECReports xmlns:ns2="urn:epcglobal:ale:xsd:1" xmlns:ns3="urn:epcglobal:ale:wsdl:1" specName="Cycle_MDEAirport_1" date="2016-04-25T15:06:19.980Z" 
ALEID="RIFIDI-ALE1158647263" totalMilliseconds="9492" terminationCondition="DURATION">
   <reports>
      <report reportName="Cycle_MDEAirport">
         <group>
            <groupList>
               <member>
                  <epc>303400c0e4a3f48000a2f8d5</epc>
               </member>
            </groupList>
         </group>
      </report>
   </reports>
   <ECSpec includeSpecInReports="true">
      <logicalReaders>
         <logicalReader>MDEAirport</logicalReader>
      </logicalReaders>
      <boundarySpec>
         <repeatPeriod unit="MS">10000</repeatPeriod>
         <duration unit="MS">9500</duration>
         <stableSetInterval unit="MS">0</stableSetInterval>
      </boundarySpec>
      <reportSpecs>
         <reportSpec reportName="Cycle_MDEAirport" reportIfEmpty="true" reportOnlyOnChange="false">
            <reportSet set="ADDITIONS" />
            <output includeEPC="true" includeTag="true" includeRawHex="true" includeRawDecimal="true" />
         </reportSpec>
      </reportSpecs>
   </ECSpec>
</ns2:ECReports> 
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "ECReports";
xRoot.Namespace = "urn:epcglobal:ale:xsd:1";
xRoot.IsNullable = true;

XmlSerializer serializer = new XmlSerializer(typeof(ECReports), xRoot);
MemoryStream ms = new MemoryStream(e.Message);
ECReports ECReports;
ECReports = (ECReports)serializer.Deserialize(ms);

我使用的类ECReports来自服务引用(它不是我开发的类)我发现了问题。您将从一个名称空间转到一个非名称空间,因此必须将名称空间指定为“”


将名称空间添加到以下行:XmlSerializer serializer=newxmlserializer(typeof(ECReports),“urn:epcglobal:ale:xsd:1”);谢谢@jdweng,我错误地忘了在代码中包含它。现在您可以看到,我更新的代码在序列化程序初始化中包含xRoot。错误还在继续!将xRoot替换为xRoot.Namespace。它是一个字符串值,而不是同时包含名称和值的属性。@jdweng xRoot运行良好,问题在于另一个名称空间(wsdl名称空间)我没有看到任何带有“ns3”的xml标记,所以我无法判断问题所在。你犯了什么错误?
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "ECReports";
xRoot.Namespace = "urn:epcglobal:ale:xsd:1";
xRoot.IsNullable = true;

XmlSerializer serializer = new XmlSerializer(typeof(ECReports), xRoot);
MemoryStream ms = new MemoryStream(e.Message);
ECReports ECReports;
ECReports = (ECReports)serializer.Deserialize(ms);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            byte[] message = File.ReadAllBytes(FILENAME);
            XmlRootAttribute xRoot = new XmlRootAttribute();
            xRoot.ElementName = "ECReports";
            xRoot.Namespace = "urn:epcglobal:ale:xsd:1";
            xRoot.IsNullable = true;

            XmlSerializer serializer = new XmlSerializer(typeof(ECReports), xRoot);
            MemoryStream ms = new MemoryStream(message);
            ECReports ECReports;
            ECReports = (ECReports)serializer.Deserialize(ms);
        }
    }
    [XmlRoot("ECReports")]
    public class ECReports
    {
        [XmlAttribute("specName")]
        public string specName { get; set; } 

        [XmlAttribute("date")]
        public DateTime date { get; set; } 

        [XmlAttribute("ALEID")]
        public string aleid { get; set; } 

        [XmlAttribute("totalMilliseconds")]
        public int totalMilliseconds { get; set; } 

        [XmlAttribute("terminationCondition")]
        public string terminationCondition { get; set; }

        [XmlElement(ElementName = "reports", Namespace = "")]
        public Reports reports { get; set; }

        [XmlElement(ElementName = "ECSpec", Namespace = "")]
        public ECSpec  ecSpec { get; set; }
    }


    [XmlRoot(ElementName = "reports", Namespace = "")]
    public class Reports
    {
        [XmlElement("report")]
        public Report report { get; set; }
    }    
    [XmlRoot("report")]
    public class Report
    {
        [XmlAttribute("reportName")]
        public string reportName { get; set; }

        [XmlElement("group")]
        public Group group { get; set; }

    }    
    [XmlRoot("group")]
    public class Group
    {
        [XmlElement("groupList")]
        public GroupList groupList { get; set; }

    }    
    [XmlRoot("groupList")]
    public class GroupList
    {
        [XmlElement("member")]
        public Member member { get; set; }

    }    
    [XmlRoot("member")]
    public class Member
    {
        [XmlElement("epc")]
        public string epc { get; set; }
    } 

    [XmlRoot("ECSpec", Namespace = "")]
    public class ECSpec
    {
        [XmlAttribute("includeSpecInReports")]
        public Boolean includeSpecInReports { get; set; }

        [XmlElement("logicalReaders")]
        public LogicalReaders logicalReaders { get; set; }

        [XmlElement("boundarySpec")]
        public BoundarySpec boundarySpec { get; set; }

        [XmlElement("reportSpecs")]
        public ReportSpecs reportSpecs { get; set; }

    }
    [XmlRoot("logicalReaders")]
    public class LogicalReaders
    {
        [XmlElement("logicalReader")]
        public string logicalReader { get; set; }
    }

    [XmlRoot("boundarySpec")]
    public class BoundarySpec
    {
        [XmlElement("repeatPeriod")]
        public Unit repeatPeriod { get; set; }

        [XmlElement("duration")]
        public Unit duration { get; set; }

        [XmlElement("stableSetInterval")]
        public Unit stableSetInterval { get; set; }
    }

    [XmlRoot("reportSpecs")]
    public class ReportSpecs
    {
        [XmlElement("reportSpec")]
        public ReportSpec reportSpec { get; set; }
    }
    [XmlRoot("")]
    public class Unit
    {
        [XmlAttribute("unit")]
        public string unit { get; set; }

        [XmlText]
        public int value { get; set; }

    }
    [XmlRoot("reportSpec")]
    public class ReportSpec
    {
        [XmlAttribute("reportName")]
        public string reportName { get; set; }

        [XmlAttribute("reportIfEmpty")]
        public Boolean reportIfEmpty { get; set; }

        [XmlAttribute("reportOnlyOnChange")]
        public Boolean reportOnlyOnChange { get; set; }

        [XmlElement("reportSet")]
        public ReportSet reportSet { get; set; }

        [XmlElement("output")]
        public Output output { get; set; }
    }

    [XmlRoot("reportSet")]
    public class ReportSet
    {
        [XmlAttribute("set")]
        public string set { get; set; }
    }

    [XmlRoot("output")]
    public class Output
    {
        [XmlAttribute("includeEPC")]
        public Boolean includeEPC { get; set; }

        [XmlAttribute("includeTag")]
        public Boolean includeTag { get; set; }

        [XmlAttribute("includeRawHex")]
        public Boolean includeRawHex { get; set; }

        [XmlAttribute("includeRawDecimal")]
        public Boolean includeRawDecimal { get; set; }
    }

}