2013-10-15 75 views
0

我看到了幾個主題,但沒有一個看起來像我的問題。的Xml反序列化returms空值,但XML具有價值

這裏是我的類:

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個項目,但對任何其他元素都有更大的作用。

+0

變化ARP和NSU從對象到int – LostInComputer

+0

@LostInComputer已經做......還是一樣:( –

+1

什麼一分鐘... ARP和NSU都在autorizacao元素,但你的類是autenticacao!你可以在巴西有困惑autorizacao與autenticacao。 – LostInComputer

回答

0

我曾嘗試與您的代碼和更新的跟蹤和它的作品。

  1. 評論的倒數第二<autenticacao>標籤。

  2. 重命名最後一個標記<autorizacao>到<autenticacao>。可能你得到錯誤的XML &最後兩個標籤混亂,所以我也只有一個標籤嘗試。

  3. 在驗證類我已經改變了ARP和NSU否則我們得到的XmlNode類型,而反序列化的類型。你也可以使用字符串而不是int。

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