Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# Xml反序列化返回空值,但Xml有值_C#_.net_Xml_Serialization_Xml Parsing - Fatal编程技术网

C# Xml反序列化返回空值,但Xml有值

C# Xml反序列化返回空值,但Xml有值,c#,.net,xml,serialization,xml-parsing,C#,.net,Xml,Serialization,Xml Parsing,我看了一些话题,但没有一个看起来像我的问题 这是我的班级: namespace Framework.Cielo.Models { [XmlRoot("transacao", Namespace = "http://ecommerce.cbmp.com.br")] public class TransactionResponse { [XmlAttribute("id")] public string ID { get; set; }

我看了一些话题,但没有一个看起来像我的问题

这是我的班级:

namespace Framework.Cielo.Models
{
    [XmlRoot("transacao", Namespace = "http://ecommerce.cbmp.com.br")]
    public class TransactionResponse
    {
        [XmlAttribute("id")]
        public string ID { get; set; }

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

        [XmlElement("tid")]
        public string tid { get; set; }

        [XmlElement("pan")]
        public string pan { get; set; }

        [XmlElement("dados-pedido")]
        public EstablishmentOrder Order { get; set; }

        [XmlElement("forma-pagamento")]
        public PaymentMethod PaymentMethod { get; set; }

        [XmlElement("status")]
        public TransactionStatusEnum Status { get; set; }

        [XmlElement("url-retorno")]
        public string ReturnUrl { get; set; }

        [XmlElement("autenticacao")]
        public Authentication Authentication { get; set; }
    }
}
这是身份验证类

namespace Framework.Cielo.Models
{
    [XmlRoot("autenticacao")]
    public class Authentication
    {
        [XmlElement("codigo")]
        public int Code { get; set; }

        [XmlElement("mensagem")]
        public string Message { get; set; }

        [XmlIgnore]
        public DateTime Date { get; set; }

        [XmlElement("data-hora")]
        public string FormattedDate
        {
            get
            {
                return Date.ToString("yyyy-MM-ddTHH:mm:ss");
            }
            set
            {
                DateTime kdc = DateTime.MinValue;
                DateTime.TryParse(value, out kdc);
                Date = kdc;
            }
        }

        [XmlElement("valor")]
        public int Value { get; set; }

        [XmlElement("lr")]
        public int SecurityLevel { get; set; }

        [XmlElement("arp")]
        public object arp { get; set; }

        [XmlElement("nsu")]
        public object nsu { get; set; }
    }
}
以下是我如何反序列化:

string serializado = File.ReadAllText("req.xml");
var stringReader = new System.IO.StringReader(serializado);
var serializer = new XmlSerializer(typeof(TransactionResponse));

TransactionResponse preAuthResponse = serializer.Deserialize(stringReader) as TransactionResponse;
这是我的XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<transacao versao="1.3.0" id="100" xmlns="http://ecommerce.cbmp.com.br">
  <tid>10069930690A16DF1001</tid>
  <pan>b1SQ6jpKCDt3n9C0dgD/ZkPQ1Bh+7aJESqr/CwP64P0=</pan>
  <dados-pedido>
    <numero>100</numero>
    <valor>29900</valor>
    <moeda>986</moeda>
    <data-hora>2013-10-15T00:57:19.032-03:00</data-hora>
    <descricao/>
    <idioma>PT</idioma>
    <taxa-embarque>0</taxa-embarque>
  </dados-pedido>
  <forma-pagamento>
    <bandeira>mastercard</bandeira>
    <produto>1</produto>
    <parcelas>1</parcelas>
  </forma-pagamento>
  <status>4</status>
  <autenticacao>
    <codigo>4</codigo>
    <mensagem>Transacao sem autenticacao</mensagem>
    <data-hora>2013-10-15T00:57:19.037-03:00</data-hora>
    <valor>29900</valor>
    <eci>0</eci>
  </autenticacao>
  <autorizacao>
    <codigo>4</codigo>
    <mensagem>Transação autorizada</mensagem>
    <data-hora>2013-10-15T00:57:19.041-03:00</data-hora>
    <valor>29900</valor>
    <lr>00</lr>
    <arp>123456</arp>
    <nsu>661215</nsu>
  </autorizacao>
</transacao>

10069930690A16DF1001
b1SQ6jpKCDt3n9C0dgD/ZKPK1BH+7aJESqr/CwP64P0=
100
29900
986
2013-10-15T00:57:19.032-03:00
PT
0
万事达卡
1.
1.
4.
4.
Transacao sem autenticacao
2013-10-15T00:57:19.037-03:00
29900
0
4.
自动通行证
2013-10-15T00:57:19.041-03:00
29900
00
123456
661215
当我运行此代码时,所有元素都正确,但不是
ARP
NSU
元素(autorizao标记的最后2个)


我真的不知道为什么。这个XML来自一个web服务,我不明白为什么我的反序列化不适用于最后两个项目,而适用于任何其他元素。

我尝试了您的代码并更新了以下内容,它可以工作

  • 注释了最后一个标记

  • 将最后一个标记重命名为。可能是您得到了错误的xml&最后两个标记很混乱,所以我只尝试了一个标记

  • 在身份验证类中,我已经更改了ARP和NSU的类型,否则我们将在反序列化时获得XMlNode类型。您还可以使用string而不是int

    [XmlElement("arp")]
    public int arp { get; set; }
    
    [XmlElement("nsu")]
    public int nsu { get; set; }
    

  • 将ARP和NSU从对象更改为int@LostInComputer已经做了。。。还是一样:(多好的一分钟…ARP和NSU在autorizacao元素中,但你的课程是为Auenticao!你可能把AutoRizao和Auenticao混淆了。@LostInComputer感谢上帝!你是对的!:(我很确定我错过了一些东西。我02:31在巴西,我从昨天早上8点开始工作,我真的很累:(谢谢你的时间!递给莱安德罗一杯刚煮好的浓咖啡