#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. Спасибо!! я понял!! устранена с помощью динамического формирования объекта задания!