#c# #blazor #blazor-server-side
#c# #blazor #blazor-на стороне сервера
Вопрос:
Я вернул данные JSON из вызова API, которые при чтении как строка из HTTP-ответа добавляют обратную косую черту перед цветочными фигурными скобками ({) в начале и конце строки JSON. Из-за этого при десериализации значения JSON в объект возникает исключение.
Я прочитал строку, используя приведенный ниже код.
string value = await httpResponse.Content.ReadAsStringAsync();
И в результате
«»{«key «:null} «»**
Из-за нежелательных косых черт, добавленных ранее после этих фигурных скобок, при десериализации возникает исключение, поскольку значение JSON не может быть преобразовано в тип объекта.
Комментарии:
1. Это экранирующие символы
2. Таким образом, похоже, что косые черты — это именно то, как Visual Studio отображает вам строку. Также похоже, что HTTP-вызов выдает вам строку в кодировке JSON, трудно сказать точно.
3. Если это есть в вашей переменной, вы можете сделать
value.Replace("\", "");
4. Что такое генерируемое исключение?
5. Косые черты — это escape-символы для двойных кавычек внутри строки, которые используются только для целей отображения; на самом деле они не являются символами в самой строке. Строка, которую вы показали выше, на самом деле выглядит так
"{"key":null}"
. Вы можете удалить внешние кавычки с помощьюTrim
метода, выполнив:value = value.Trim(""");
Ответ №1:
Похоже, что API, который вы запрашиваете для ответа на ключ, сериализует объект JSON
дважды или около того. Обычно это дает экранированную строку, как вы упомянули.
Попробуй это:
var unescaped = JsonConvert.DeserializeObject<string>(value);
var key = JsonConvert.DeserializeObject<MyKeyClass>(unescaped);
Предполагая, что ваш MyKeyClass выглядит примерно так:
public class MyKeyClass {
public string Key { get; set; }
}