#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, о котором я упоминал выше, без явного указания имени каждого свойства для получения этого формата, потому что продолжайте писатьимена свойств могут открывать множество ошибок в часто обновляемом коде, разработчики могут забыть обновить эту область в коде без какого-либо предупреждения.