Как обновить некоторые значения в Json Объект, используя C# - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть файл Json (rawResult), который содержит несколько элементов, которые необходимо обновить.

В основном любой ключ элемента в json, который содержит " | translate " , тогда часть значения должна быть заменена текстом из соответствующего словаря (Spani sh или Engli sh).

var rawResult = "{"fields": [{
  "fieldGroup": [
    {
      "key": "Task",
      "type": "input",
      "templateOptions": {
        "label|translate": "task_templateoptions_label",
        "placeholder|translate": "task_templateoptions_placeholder"
      },
      "validation": {
        "messages": {
          "required|translate": "task_validation_messages_required",
        }
      }
    },
    {
      "key": "Sub Task",
      "type": "input",
      "templateOptions": {
        "label|translate": "sub_task_templateOptions_label",
        "placeholder|translate": "sub_task_templateOptions_placeholder"
      }
    }
  ]
}]}"

// Словарь для испанского языка sh

Dictionary<string, string> dcSpanish = new Dictionary<string, string>();
dcSpanish.Add("task_templateoptions_label", "Tarea");
dcSpanish.Add("task_templateoptions_placeholder", "Ingrese el nombre de la tarea");
dcSpanish.Add("task_validation_messages_required", "El nombre de la tarea es obligatorio");
dcSpanish.Add("sub_task_templateOptions_label", "Sub tarea");
dcSpanish.Add("sub_task_templateOptions_placeholder", "Ingrese el nombre de la subtarea");

// Словарь для английского языка sh

Dictionary<string, string> dcEnglish = new Dictionary<string, string>();
dcEnglish.Add("task_templateoptions_label", "Task");
dcEnglish.Add("task_templateoptions_placeholder", "Enter the task name");
dcEnglish.Add("task_validation_messages_required", "Task name is required");
dcEnglish.Add("sub_task_templateOptions_label", "Sub task");
dcEnglish.Add("sub_task_templateOptions_placeholder", "Enter the sub task name");

Таким образом, если в Spani sh запрашивается результат Json, то результат должен быть,

var result = "{"fields": [{
  "fieldGroup": [
    {
      "key": "Task",
      "type": "input",
      "templateOptions": {
        "label": "Tarea",
        "placeholder": "Ingrese el nombre de la tarea"
      },
      "validation": {
        "messages": {
          "required": "El nombre de la tarea es obligatorio",
        }
      }
    },
    {
      "key": "Sub Task",
      "type": "input",
      "templateOptions": {
        "label": "Sub tarea",
        "placeholder": "Ingrese el nombre de la subtarea"
      }
    }
  ]
}]}"

1 Ответ

1 голос
/ 28 апреля 2020

Вы можете запросить Json с помощью Linq и обновить значения, где JProperty.Name содержит необходимую подстроку (перевод). Например,

var jobject = JObject.Parse(rawResult);
new json = Translate(jobject,dcSpanish);

Где Translate определяется как

string Translate(JObject jo, Dictionary<string,string> translationDictionary)
{
    var keys = jo
                .DescendantsAndSelf()
                .OfType<JProperty>()
                .Where(x=>x.Name.Contains("|translate")).ToList();

    foreach(var item in keys)
    {
        item.Replace(new JProperty(item.Name.Replace("|translate",""), translationDictionary[item.Value.ToString()]));
    }
    return jo.ToString();
}

Демонстрационный код

Пример вывода

{
  "fields": [
    {
      "fieldGroup": [
        {
          "key": "Task",
          "type": "input",
          "templateOptions": {
            "label": "Tarea",
            "placeholder": "Ingrese el nombre de la tarea"
          },
          "validation": {
            "messages": {
              "required": "El nombre de la tarea es obligatorio"
            }
          }
        },
        {
          "key": "Sub Task",
          "type": "input",
          "templateOptions": {
            "label": "Sub tarea",
            "placeholder": "Ingrese el nombre de la subtarea"
          }
        }
      ]
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...