gpt4 book ai didi

c# - 反序列化不填充数据 - C#

转载 作者:数据小太阳 更新时间:2023-10-29 02:04:48 24 4
gpt4 key购买 nike

我正在尝试反序列化 XML。 下面给出了示例 XML

 <?xml version="1.0" ?> 
<TRANSACTION_RESPONSE>
<TRANSACTION>
<TRANSACTION_ID>25429</TRANSACTION_ID>
<MERCHANT_ACC_NO>02700701354375000964</MERCHANT_ACC_NO>
<TXN_STATUS>F</TXN_STATUS>
<TXN_SIGNATURE>a16af68d4c3e2280e44bd7c2c23f2af6cb1f0e5a28c266ea741608e72b1a5e4224da5b975909cc43c53b6c0f7f1bbf0820269caa3e350dd1812484edc499b279</TXN_SIGNATURE>
<TXN_SIGNATURE2>B1684258EA112C8B5BA51F73CDA9864D1BB98E04F5A78B67A3E539BEF96CCF4D16CFF6B9E04818B50E855E0783BB075309D112CA596BDC49F9738C4BF3AA1FB4</TXN_SIGNATURE2>
<TRAN_DATE>29-09-2015 07:36:59</TRAN_DATE>
<MERCHANT_TRANID>150929093703RUDZMX4</MERCHANT_TRANID>
<RESPONSE_CODE>9967</RESPONSE_CODE>
<RESPONSE_DESC>Bank rejected transaction!</RESPONSE_DESC>
<CUSTOMER_ID>RUDZMX</CUSTOMER_ID>
<AUTH_ID />
<AUTH_DATE />
<CAPTURE_DATE />
<SALES_DATE />
<VOID_REV_DATE />
<REFUND_DATE />
<REFUND_AMOUNT>0.00</REFUND_AMOUNT>
</TRANSACTION>
</TRANSACTION_RESPONSE>

下面是类

[XmlType("TRANSACTION_RESPONSE")]

public class BankQueryResponse
{
[XmlElement("TRANSACTION_ID")]
public string TransactionId { get; set; }

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

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

[XmlElement("TRAN_DATE")]
public DateTime TranDate { get; set; }

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


[XmlElement("REFUND_DATE")]
public DateTime RefundDate { get; set; }

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


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

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

}

反序列化代码为

BankQueryResponse result = new BankQueryResponse();
if(!string.IsNullOrEmpty(responseData))
{
XmlSerializer serializer = new XmlSerializer(typeof(BankQueryResponse));

using(TextReader xmlreader = new StringReader(responseData))
{
result = (BankQueryResponse) serializer.Deserialize(xmlreader);
}
}

我将结果中的所有值都设为 null 。我不确定是什么原因。有人可以阐明这个问题吗?我在反序列化时遗漏了什么吗

最佳答案

你应该像这样修改代码

[XmlType("TRANSACTION_RESPONSE")]
public class TransactionResponse
{
[XmlElement("TRANSACTION")]
public BankQueryResponse Response { get; set; }

}

这会变成这样

public class BankQueryResponse
{
[XmlElement("TRANSACTION_ID")]
public string TransactionId { get; set; }

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

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

[XmlElement("TRAN_DATE")]
public DateTime TranDate { get; set; }

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


[XmlElement("REFUND_DATE")]
public DateTime RefundDate { get; set; }

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


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

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

}

反序列化代码应该是这样的

TransactionResponse result = new TransactionResponse();
if(!string.IsNullOrEmpty(responseData))
{
XmlSerializer serializer = new XmlSerializer(typeof(TransactionResponse));

using(TextReader xmlreader = new StringReader(responseData))
{
result = (TransactionResponse) serializer.Deserialize(xmlreader);
}
}

关于c# - 反序列化不填充数据 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32856249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com