Сериализация объекта класса со списком строк, полученных из вложенного класса в XML в c # Webapi - PullRequest
0 голосов
/ 29 июня 2018

Привет, я работаю над разработкой проекта Web-API, который подключается и работает с несколькими устройствами. У меня есть одно требование, например печать формата XML непосредственно в мобильном устройстве печати (WizarPOS), мне нужно отправить формат ответа, как указано ниже.

<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 для него?

1 Ответ

0 голосов
/ 29 июня 2018

Это потому, что в <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; }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...