Неправильная управляющая последовательность JSON: \1. Путь ‘разделы [0].факты [0].значение’, строка 1, позиция 196.»

#json #.net-core

#json #.net-core

Вопрос:

Я получаю ошибку Bad JSON escape sequence: \1. Path 'sections[0].facts[0].value', line 1, position 196." при разборе строки json с помощью string.Format добавления данных на основе заполнителя.

Ниже приведен код :

 string jsonFormatString = @"{{""title"": ""{0}"",""sections"": [{{""facts"": [{{""name"": ""TransactionNo"",""value"": ""{1}""}}]}}]}}";
string formattedJson= string.Format(jsonFormatString , message, transactionNo ?? "");
var result = JsonConvert.DeserializeObject<dynamic>(formattedJson);
  

Строковыми значениями для заполнителей были message = «Успех транзакции», transactionNo = «1920 1 ABC»;

Похоже, что поле escape-символа transactionNo создает проблему.

Я пробовал со строкой.Заменить(@»\», @»») и другие, ничто не помогло в устранении ошибки.

Если бы я добавил строку.Заменить(@»», @»\», это работает, но результирующий json не содержит транзакции как «1920 01 \ ABC», что также неверно.

Я что-то упускаю или мне следует добавить что-то еще

Ответ №1:

Я видел, как люди делали это в прошлом, и даже приходилось поддерживать код, который выглядит следующим образом … и, как вы видите, это огромный ЛАВАШ.

Вы можете легко расположить свои объекты, используя anonymous типы, чтобы они были просты в обслуживании и понимании для людей, которые, возможно, будут иметь удовольствие работать с вашим кодом в будущем.

Взгляните на это:

 var myObj = new {
    title = "<input value>",
    sections = new[]
    {
        new
        {
            facts = new[]
            {
                new
                {
                    name = "TransactionNo",
                    value = "<input value>"
                }
            }
        }
    }
};

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

Результат будет выглядеть следующим образом:

 {
  "title": "<input value>",
  "sections": [
    {
      "facts": [
        {
          "name": "TransactionNo",
          "value": "<input value>"
        }
      ]
    }
  ]
}
  

Теперь имейте в виду, что это проще в обслуживании, чем форматирование строки, но в конце концов лучше просто стиснуть зубы и создать несколько конкретных моделей.

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

1. привет @ andy я уже пробовал эту анонимную методологию, проблема с этим в окончательном ответе «значение»: «1920 \ 01 \ ABC» вместо «1920 01 ABC»

2. @A.K — когда вы форматируете обратную косую черту в строку JSON, они «экранируются», при десериализации они вернутся к нормальному состоянию. Поиграйте с этим, чтобы понять, что я имею в виду: freeformatter.com/json-escape.html#ad-output

3. Спасибо!! я понял!! устранена с помощью динамического формирования объекта задания!