[英]Serialize class object with list of strings derived nested class into XML in c# Webapi
嗨,我正在開發Web-API項目,該項目可以連接並使用多設備。 我有一個要求,例如直接在移動打印設備(WizarPOS)中打印XML格式,我需要發送如下所示的響應格式。
<RESPONSE TYPE="PRINT" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TERMINALID>993324</TERMINALID>
<LOCALDATETIME>2018-11-16 09:08:40</LOCALDATETIME>
<SERVERDATETIME>6/29/2018 3:33:34 PM</SERVERDATETIME>
<TXID>880034435</TXID>
<HOSTTXID>ID00008769249</HOSTTXID>
<AMOUNT>500</AMOUNT>
<CURRENCY>634</CURRENCY>
<LIMIT>0</LIMIT>
<RECEIPT>
<LINES>14</LINES>
<LINE>Provider Pin</LINE>
<LINE>TerminalID: 993324</LINE>
<LINE>Date: 29.06.2018</LINE>
<LINE>TimeOfDay: 15:06:SS</LINE>
<LINE>Trace-No: 160537</LINE>
<LINE>Receipt-No: 475514</LINE>
<LINE>--------------------------------------------------</LINE>
<LINE>Value: 500 QAR</LINE>
<LINE>Product without VAT</LINE>
<LINE>Service: 7736737741</LINE>
<LINE>Hotline: 0110/400773</LINE>
<LINE>Serial Number: 778617719</LINE>
<LINE>CashCode:</LINE>
<LINE>2866-8195-3923-8894</LINE>
</RECEIPT>
<RESULT>0</RESULT>
<RESULTTEXT>Transaction Successful</RESULTTEXT>
<PINCREDENTIALS>
<PIN>2846-4607-1987-3562</PIN>
<SERIAL>778617719</SERIAL>
<VALIDTO>11/29/2018 3:33:34 PM</VALIDTO>
</PINCREDENTIALS>
為此,我創建了兩個主類和兩個嵌套類,其中一個嵌套類具有字符串派生類的列表,如下所示
[XmlRoot("RESPONSE", DataType = "PRINT")]
public class PinDirectResponseVM
{
public int TERMINALID { get; set; }
public string LOCALDATETIME { get; set; }
public string SERVERDATETIME { get; set; }
public int TXID { get; set; }
public string HOSTTXID { get; set; }
public string AMOUNT { get; set; }
public string CURRENCY { get; set; }
public string LIMIT { get; set; }
[XmlArrayItem(ElementName = "LINE")]
public ReceiptResponseVM RECEIPT { get; set; }
public string RESULT { get; set; }
public string RESULTTEXT { get; set; }
public string AID { get; set; }
public PinCredentialsResponseVM PINCREDENTIALS { get; set; }
}
public class ReceiptResponseVM : List<string>
{
public int LINES { get; set; }
}
public class PinCredentialsResponseVM
{
public string PIN { get; set; }
public string SERIAL { get; set; }
public string VALIDTO { get; set; }
}
當我返回'PinDirectResponseVM'對象沒有得到<LINES>14<LINES>
標簽時,我得到了這樣的響應
<RESPONSE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TERMINALID>993324</TERMINALID>
<LOCALDATETIME>2018-11-16 09:08:40</LOCALDATETIME>
<SERVERDATETIME>6/29/2018 3:33:34 PM</SERVERDATETIME>
<TXID>880034435</TXID>
<HOSTTXID>ID00008769249</HOSTTXID>
<AMOUNT>500</AMOUNT>
<CURRENCY>634</CURRENCY>
<LIMIT>0</LIMIT>
<RECEIPT>
<LINE>Provider Pin</LINE>
<LINE>TerminalID: 993324</LINE>
<LINE>Date: 29.06.2018</LINE>
<LINE>TimeOfDay: 15:06:SS</LINE>
<LINE>Trace-No: 160537</LINE>
<LINE>Receipt-No: 475514</LINE>
<LINE>--------------------------------------------------</LINE>
<LINE>Value: 500 QAR</LINE>
<LINE>Product without VAT</LINE>
<LINE>Service: 7736737741</LINE>
<LINE>Hotline: 0110/400773</LINE>
<LINE>Serial Number: 778617719</LINE>
<LINE>CashCode:</LINE>
<LINE>2866-8195-3923-8894</LINE>
</RECEIPT>
<RESULT>0</RESULT>
<RESULTTEXT>Transaction Successful</RESULTTEXT>
<PINCREDENTIALS>
<PIN>2846-4607-1987-3562</PIN>
<SERIAL>778617719</SERIAL>
<VALIDTO>11/29/2018 3:33:34 PM</VALIDTO>
</PINCREDENTIALS>
因此,請幫助我根據我的要求獲得響應,為此生成XML的最佳方法是什么?
這是因為<RECEIPT></RECEIPT>
節點中有兩個不同的子節點,分別是
<LINES></LINES>
<LINE></LINE>
您可以執行以下操作:
XmlRoot("RESPONSE", DataType = "PRINT")]
public class PinDirectResponseVM
{
public int TERMINALID { get; set; }
public string LOCALDATETIME { get; set; }
public string SERVERDATETIME { get; set; }
public int TXID { get; set; }
public string HOSTTXID { get; set; }
public string AMOUNT { get; set; }
public string CURRENCY { get; set; }
public string LIMIT { get; set; }
public ReceiptResponseVM RECEIPT { get; set; }
public string RESULT { get; set; }
public string RESULTTEXT { get; set; }
public string AID { get; set; }
public PinCredentialsResponseVM PINCREDENTIALS { get; set; }
}
public class ReceiptResponseVM //: List<string>
{
[XmlElement(Order = 1, ElementName = "LINES")]
public int LINES { get; set; }
[XmlElement(Order = 2, ElementName = "LINE")]
public List<string> LINE {get; set;}
}
public class PinCredentialsResponseVM
{
public string PIN { get; set; }
public string SERIAL { get; set; }
public string VALIDTO { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.