0

我看到的话题很少,但没有一个看起来像我的问题。

这是我的课:

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>

当我运行此代码时,所有元素都正确,但不是ARPNSU元素(autorizacao 标记的最后 2 个)

我真的不知道为什么。此 XML 来自 Web 服务,我无法弄清楚为什么我的反序列化不适用于最后 2 个项目,但对任何其他元素都有效。

4

1 回答 1

0

我已尝试使用您的代码并更新了以下代码,并且可以正常工作。

  1. 评论倒数第二个 <autenticacao> 标签。

  2. 将最后一个标签 <autorizacao> 重命名为 <autenticacao> 。可能是你弄错了 xml 并且最后两个标签令人困惑,所以我只尝试了一个标签。

  3. 在 Authentication 类中,我更改了 ARP 和 NSU 的类型,否则我们在反序列化时得到 XMlNode 类型。您也可以使用字符串代替 int。

    [XmlElement("arp")]
    public int arp { get; set; }
    
    [XmlElement("nsu")]
    public int nsu { get; set; }
    
于 2013-10-15T05:47:55.390 回答