如何在不将它们分组的情况下返回子XML节点

时间:2018-04-04 15:38:45

标签: c# xml asp.net-web-api asp.net-web-api2

我正在MVC 5中编写Web API 2控制器。目前,我的XML输出如下所示:

<ArrayOfVoucher xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyAPI.Models">
    <Voucher>
        <VoucherDate>2018-04-04</VoucherDate>
        <VoucherNumber>123</VoucherNumber>
        <VoucherTransactions>
            <VoucherTransaction>
                <TransDate>2018-04-03</TransactionDate>
                <TransType>GL</TransactionType>
            </VoucherTransaction>
            <VoucherTransaction>
                <TransDate>2018-04-03</TransactionDate>
                <TransType>GL</TransactionType>
            </VoucherTransaction>
        </VoucherTransactions>
    <Voucher>
</ArrayOfVoucher>

但是,我正在努力说明它应该是这样的:

<ArrayOfVoucher xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyAPI.Models">
    <Voucher>
        <VoucherDate>2018-04-04</VoucherDate>
        <VoucherNumber>123</VoucherNumber>
        <Transaction>
            <TransDate>2018-04-03</TransactionDate>
            <TransType>GL</TransactionType>
        </Transaction>
        <Transaction>
            <TransDate>2018-04-03</TransactionDate>
            <TransType>GL</TransactionType>
        </Transaction>
    <Voucher>
</ArrayOfVoucher>

注意差异。在第二个样本中:

  • VoucherTransaction个节点未在名为“VoucherTransactions”的节点中组合在一起。
  • VouncherTransaction个节点名为Transaction

我可以通过修改数据模型的定义来实现第二个(见下文),虽然我想知道是否有更好的方法,因为目前模型属性的名称是合理的。

我的主要问题与第一点有关。如何阻止VoucherTransaction节点在VoucherTransactions节点中分组?

这些是我的数据模型类:

public class Voucher
{
    public string VoucherNumber { get; set; }
    public DateTime VoucherDate { get; set; }
    public List<VoucherTransaction> VoucherTransactions { get; set; }
}

VoucherTransaction

public class VoucherTransaction
{
    public string TransType { get; set; }
    public DateTime TransDate { get; set; }
}

目前创建列表的代码是:

foreach (SalesLedgerTransaction t in salesLedgerTransactions)
{
    Voucher voucher = new Voucher
    {
        VoucherNo = "1",
        VoucherDate = t.TransactionDate,
        VoucherTransactions = new List<VoucherTransaction>()
    };

    VoucherTransaction arTransaction = new VoucherTransaction
    {
        TransType = "AR",
        TransDate = t.TransactionDate
    };
    voucher.VoucherTransactions.Add(arTransaction);

    VoucherTransaction glTransaction = new VoucherTransaction
    {
        TransType = "GL",
        TransDate = t.TransactionDate
    };
    voucher.VoucherTransactions.Add(glTransaction);

    vouchers.Add(voucher);
}

所以是的,如果有人可以帮助我操纵XML,那么凭证交易不会分组在一个很酷的子节点中。对于指定与模型属性(以及根节点的名称 - ArrayOfVoucher不同的节点名称的帮助的额外赞赏也不符合规范。)。

0 个答案:

没有答案