Как преобразовать Json ключ: значение в значение: значение в C#? - PullRequest
2 голосов
/ 06 мая 2020

Я читаю файл ресурсов в C# и конвертирую его в строковый формат JSON. Теперь я хочу преобразовать значение этой строки JSON в ключи.

Пример,

[
 {
  "key": "CreateAccount",
  "text": "Create Account"
 },
 {
  "key": "EmailAddress",
  "text": "Email Address"
 }
]

Итак, я просто хочу превратить приведенную выше строку json в «Ключ: текст», как показано ниже,

[
 {
  "CreateAccount": "Create Account"
 },
 {
  "EmailAddress": "Email Address"
 }
]

My C#,

var obj = new
 {
   Lang=XElement.Parse(_FileDataAsText)
    .Elements("data")
    .Select(el => new
          {
                    key= el.Attribute("name").Value,
                    text = el.Element("value").Value
          }.ToList()
 };

 string json = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);

1 Ответ

2 голосов
/ 06 мая 2020

Создайте класс для представления внутренних объектов JSON:

public class RootObject
{
    public string Key { get; set; }
    public string Text { get; set; }
}

Затем десериализуйте массив JSON в List<RootObject>, используя Json. NET, спроецировать объект key и text на пары значений ключа внутри Dictionary<string, string>, используя Enumerable.Select, затем сериализовать результат как List<Dictionary<string, string>>.

using Newtonsoft.Json;

...

var json = @"[{""key"": ""CreateAccount"",""text"": ""Create Account""},{""key"": ""EmailAddress"",""text"": ""Email Address""}]";

 var deserializedJson = JsonConvert
    .DeserializeObject<List<RootObject>>(json);

var result = deserializedJson
    .Select(obj => new Dictionary<string, string> { 
        { obj.Key, obj.Text } 
    })
    .ToList();

var serializedJson = JsonConvert.SerializeObject(result, Formatting.Indented);

Console.WriteLine(serializedJson);

Вывод:

[
  {
    "CreateAccount": "Create Account"
  },
  {
    "EmailAddress": "Email Address"
  }
]
...