JsonConvert.SerializeObject удалить имя объекта

#c# #json #json.net

#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, как показано ниже, поэтому удаление имен объектов invoiceHeaderEntity и p .

Без явной записи вручную каждого имени свойства из объектов invoiceHeaderEntity и p

 {
    "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
      }
   ],
}
  

Я не могу сделать это вручную, как показано ниже, потому invoiceHeaderEntity что и invoiceLinesEntities также динамично, поэтому его содержимое время от времени меняется

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

Обновить:
На самом деле, у меня есть большая система, которая содержит сотни объектов, содержащих подсписки других объектов, и мы хотим записывать каждую команду СОХРАНЕНИЯ / ОБНОВЛЕНИЯ / УДАЛЕНИЯ в приложении в файлы с ПРОСТЫМ форматом JSON, о котором я упоминал выше, без явного указания имени каждого свойства для получения этого формата, потому что продолжайте записыватьимена свойств могут открывать множество ошибок в часто обновляемом коде, разработчики могут забыть обновить эту область в коде без предупреждения

Комментарии:

1. Из любопытства, насколько полезно в EAI иметь постоянно меняющееся местоположение для InvoiceNo ?

2. Извините, я не понял, что вы имеете в виду!!!

3. Я думаю, что у вас большая проблема с дизайном, связанная с чрезмерным использованием динамического кода . Вы сказали invoiceHeaderEntity , что это «динамический» , так насколько полезно обмениваться счетом с кем-то, у кого может не быть номера счета .

4. Я привел пример счета-фактуры просто для упрощения идеи, то, что я ищу, — это просто запись объекта заголовка в запросе LINQ без явного продолжения записи каждого имени свойства для генерации текста JSON, как указано выше

5. На самом деле, у меня большая система, которая содержит сотни объектов, содержащих подсписки других объектов, и мы хотим записывать каждую команду СОХРАНЕНИЯ / ОБНОВЛЕНИЯ / УДАЛЕНИЯ в приложении в файлы с ПРОСТЫМ форматом JSON, о котором я упоминал выше, без явного указания имени каждого свойства для получения этого формата, потому что продолжайте писатьимена свойств могут открывать множество ошибок в часто обновляемом коде, разработчики могут забыть обновить эту область в коде без какого-либо предупреждения.