2013-08-08 2 views
2

Json.net удобен для десериализации объекта, но я не знаю, как его использовать для десериализации некоторого простого типа, такого как строка, int.Как десериализовать простой тип с помощью json.net?

Не уверен, что я сделал все правильно, пожалуйста, помогите, спасибо!

возвращение WCF строка выглядит

{"PingResult":100} 

Если вызов

int result = JsonConvert.DeserializeObject<int>(jsonString); 

Unity бросить

JsonReaderException: Error reading integer. Unexpected token: StartObject. Path '', line 1, position 1. 
Newtonsoft.Json.JsonReader.ReadAsInt32Internal() 
Newtonsoft.Json.JsonTextReader.ReadAsInt32() 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType (Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonContract contract, Boolean hasConverter) 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, Boolean checkAdditionalContent) 

ответ

3

Вы не де сериализация целого числа, но объект, содержащий целочисленное свойство. Вы должны предоставить такой класс для десериализации, чтобы работать, например:

class Ping 
{ 
    public int PingResult {get; set;} 
} 

, а затем вызвать

Ping ping = JsonConvert.DeserializeObject<Ping>(jsonString); 
int result = ping.PingResult; 

Другой подход будет использовать JObject api:

string json="{\"PingResult\":100}"; 
JObject jo = JObject.Parse(json); 
JToken jToken = jo["PingResult"]; 
int result = (int)jToken; 
+0

К сожалению, Я думал, что это может справиться с этим, поскольку создание нового класса для каждой из них не является удивительной идеей, особенно если у нас есть много методов для вызова: p Тем не менее, очень удобно вызывать JObject API для этого. Спасибо, чувак:] Коды здесь, если кому-то это нужно. 'string json =" {\ "PingResult \": 100} "; \t \t JObject jo = JObject.Parse (json); \t \t JToken result = jo ["PingResult"]; ' – zhuchun

+0

Я рад, что помог, добавил ваш пример к моему ответу, чтобы он был более полным. – elolos

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