JsonConvert.SerializeObject删除对象名称

时间:2020-09-30 04:13:50

标签: c# json json.net

我有以下动态对象需要序列化为JSON字符串

dynamic salesInvoice = new
{
    invoiceHeaderEntity,
    InvoiceLines = (from p in invoiceLinesEntities
                    select new
                    {
                        p,
                    }).ToList()
};
string invoiceJson = JsonConvert.SerializeObject(salesInvoice);

现在invoiceJson内容中包含以下JSON字符串

{
    "invoiceHeaderEntity":{
      "InvoiceNo":22,
      "InvoiceTotal":100.00,
    },      
    "InvoiceLines":[
      {
         "p":{
            "Quantity":1.00,
            "LineTotal":50.00,
            "UnitPrice":50.00,
            "Description":null,
            "LineOrder":1
         },
      },
      {
         "p":{
            "Quantity":1.00,
            "LineTotal":50.00,
            "UnitPrice":50.00,
            "Description":null,
            "LineOrder":2
         },
      }
   ],
}

但是我想要的是一个简单的JSON字符串,如下所示,因此删除对象名称invoiceHeaderEntityp

无需从对象invoiceHeaderEntityp 显式地手动写入每个属性名称

{
    "InvoiceNo":22,
    "InvoiceTotal":100.00,  
    "InvoiceLines":[
      {
        "Quantity":1.00,
        "LineTotal":50.00,
        "UnitPrice":50.00,
        "Description":null,
        "LineOrder":1
      },
      {
        "Quantity":1.00,
        "LineTotal":50.00,
        "UnitPrice":50.00,
        "Description":null,
        "LineOrder":2
      }
   ],
}

我无法手动执行以下操作,因为invoiceHeaderEntityinvoiceLinesEntities也是动态的,因此其内容会不时更改

dynamic salesInvoice = new
{
    invoiceHeaderEntity.InvoiceNo,
    invoiceHeaderEntity.InvoiceTotal,
    InvoiceLines = (from p in invoiceLinesEntities
                    select new
                    {
                        p.Quantity,
                        p.LineTotal,
                        ...
                    }).ToList()
};
string invoiceJson = JsonConvert.SerializeObject(salesInvoice);

更新: 实际上,我有一个大型系统,其中包含数百个对象,这些对象包含其他对象的子列表,并且我们希望将应用程序中的每个SAVE / UPDATE / DELETE命令记录到上面提到的SIMPLE JSON格式的文件中,而无需明确地编写每个对象属性名称来获得这种格式,因为继续写属性名称可能会在频繁更新的代码上打开许多错误,开发人员可能会忘记在代码中更新此区域而没有任何警告

0 个答案:

没有答案