3

Json.net反序列化对象很方便,但是我不知道如何使用它来反序列化一些简单的类型,例如string,int。

不知道我做的对不对,请帮忙,谢谢!

WCF 返回字符串看起来像

{"PingResult":100}

如果打电话

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

统一投掷

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)
4

2 回答 2

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;
于 2013-08-08T13:06:43.493 回答
1

反序列化存储为字符串的简单类型(这个问题的标题)可以这样完成:

    private static T ParseStringToTypedValue<T>(string value)
    {
        if (typeof(T) == typeof(string))
        {
            return JToken.Parse($"\"{value}\"")
                         .Value<T>();
        }

        return JToken.Parse(value)
                     .Value<T>();
    }

这应该处理所有基本类型、浮点数、整数、字符串等。

于 2018-10-02T02:46:44.853 回答