Это выглядит, как если бы ваш JSON был дважды сериализации, то есть объект был сериализовать в формате JSON, то эта строка была сериализованная снова. См. JSON.NET Parser seems to be double serializing my objects для примера того, как эту ошибку можно легко сделать с помощью asp.net-web-api.
Лучший способ решить проблему состоит в том, чтобы не начинать с двойного сериализации JSON. Если по каким-либо причинам это не может быть фиксированным (так как, например, двойной сериализованная JSON возвращается из некоторого 3-службы партии, вы не можете изменить), вы всегда можете десериализации в два раза, а также:
var json = @"""{\""value\"":[\""18\""]}""";
Console.WriteLine("JSON: ");
Console.WriteLine(json); // Prints "{\"value\":[\"18\"]}"
var intermediateJson = JsonConvert.DeserializeObject<string>(json);
var root = JsonConvert.DeserializeObject<RootObject>(intermediateJson);
Console.WriteLine("Reserialized root: ");
Console.WriteLine(JsonConvert.SerializeObject(root)); // Prints {"value":["18"]}
Console.WriteLine("value:");
Console.WriteLine(root.value.First()); // Prints 18
Использование для корневого объекта:
public class RootObject
{
public List<string> value { get; set; }
}
почему ваш JSON есть символ \»?. что произойдет, если вы замените эту строку перед тем десериализации ?. Попробуйте удалить, что из строки – NicoRiff
вы собираетесь нужно предоставить больше контекста. Где вы видите, что string? В файле? В исходном коде C#? В отладчике Visual Studio? –
Экранирование происходит из-за того, что строка JSON находится в строке. Поэтому цитаты должны быть экранированы –