sencsk Ответов: 1

Преобразование общего списка в формат json


Привет, ребята, кто-нибудь может помочь мне достичь такого результата. я не могу установить заголовок массива, как показано ниже. предложите мне лучший способ и решение либо образец источника
мой код:
    var groupedCustomerList = _commonService.GetMultilingualDatas(language)
.GroupBy(u => u.screen_name)
.Select(grp => grp.ToList())
.ToList();
    string output = Newtonsoft.Json.JsonConvert.SerializeObject(groupedCustomerList);


Фактический результат, который я получаю:
[
  [
    {
      "multilingual_id": 1,
      "screen_name": "splash_screen",
      "key": "care_any_ware",
      "max_length": 0,
      "value": "Care anywhere",
      "comments": "",
      "language": "en-gb"
    }
  ],
  [
    {
      "multilingual_id": 2,
      "screen_name": "login_start",
      "key": "log_in",
      "max_length": 0,
      "value": "Log in",
      "comments": "",
      "language": "en-gb"
    },
    {
      "multilingual_id": 3,
      "screen_name": "login_start",
      "key": "join_today",
      "max_length": 0,
      "value": "Join today",
      "comments": "",
      "language": "en-gb"
    },
    {
      "multilingual_id": 4,
      "screen_name": "login_start",
      "key": "take_a_quick_tour",
      "max_length": 0,
      "value": "Take a quick tour",
      "comments": "",
      "language": "en-gb"
    }
  ],



ожидаемый результат:
{
  "splash_screen": [
    {
      "key": "care_any_ware",
      "max_length": "25",
      "value": "Care anywhere",
      "value_en": "Care anywhere",
      "comments": ""
    }
  ],
  <big>"login_start"</big>: [
    {
      "key": "log_in",
      "max_length": "35",
      "value": "Log in",
      "value_en": "Log in",
      "comments": ""
    },
    {
      "key": "join_today",
      "max_length": "35",
      "value": "Join today",
      "value_en": "Join today",
      "comments": ""
    },
    {
      "key": "take_a_quick_tour",
      "max_length": "35",
      "value": "Take a quick tour",
      "value_en": "Take a quick tour",
      "comments": ""
    }
  ],


Что я уже пробовал:

*Пробовал использовать список в качестве свойства в классе
*Блог Раджу - создание N-уровня ASP.NET приложение Web API[^]
Как получить имя для массива Json в web API[^]
еще несколько ссылок stackoverflow

1 Ответов

Рейтинг:
5

Richard Deeming

Преобразуйте данные в словарь вместо списка:

var groupedCustomerList = _commonService.GetMultilingualDatas(language)
    .GroupBy(u => u.screen_name)
    .ToDictionary(g => g.Key);

string output = Newtonsoft.Json.JsonConvert.SerializeObject(groupedCustomerList);

NB: Ты все равно закончишь с этим screen_name свойство по каждому пункту. Если вы хотите удалить это, вы можете проецировать элементы группы в анонимный класс:
.GroupBy(u => u.screen_name, u => new
{
    u.key,
    u.max_length,
    u.value,
    u.value_en,
    u.comments,
})
(Или просто добавьте [JsonIgnore] атрибут к этому свойству.)