2017-01-04 2 views
-2

Я просто не могу понять это. Пробовал уже с JsonConvert.SerializeObject (item), и у меня тоже была странная строка.Анализ синтаксической строки json "{" value ": [" 18 "]}"

Как я могу исключить из этой строки строку?

"{\"value\":[\"18\"]}" 

Редактировать @

Это где я stringify его:

var data = new FormData(); 
    data.append('cates', JSON.stringify(toSend)); 

и вот что выход я получаю от модели> список реквизита

https://gyazo.com/b9a6f212345b854796af3d80e4169a23

@deserializing

 foreach (var item in data.cates) 
     { 
      var l = JsonConvert.DeserializeObject(item); 
     } 
+0

почему ваш JSON есть символ \»?. что произойдет, если вы замените эту строку перед тем десериализации ?. Попробуйте удалить, что из строки – NicoRiff

+1

вы собираетесь нужно предоставить больше контекста. Где вы видите, что string? В файле? В исходном коде C#? В отладчике Visual Studio? –

+0

Экранирование происходит из-за того, что строка JSON находится в строке. Поэтому цитаты должны быть экранированы –

ответ

1

Это выглядит, как если бы ваш 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; } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^