Обратная косая черта добавляется перед строкой json и вызывает проблему с десериализацией

#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; }
}