将Json.Net JValue转换为int

tre*_*eat 11 c# json.net

我试过了:

JValue myJValue = getJValue(someVar);
int storedValue = JsonConvert.DeserializeObject(myJValue);
Run Code Online (Sandbox Code Playgroud)

但这似乎只适用于JObjects.有没有办法从JValue中获取整数?

ste*_*tph 24

也许这可以帮助你:

int storedValue = myJValue.ToObject<int>(); 
Run Code Online (Sandbox Code Playgroud)

  • 确实如此!谢谢 (2认同)

Wil*_*ood 5

对于任何对Performance感兴趣的人,Value()它的速度要快得多ToObject()。对于字符串,只需使用ToString()

内部测试:

value.Value<int>() - 2496ms
value.ToObject<int>() - 6259ms
Run Code Online (Sandbox Code Playgroud)

双重测试:

value.Value<double>() - 572ms
value.ToObject<double>() - 6319ms
Run Code Online (Sandbox Code Playgroud)

字符串测试:

value.Value<string>() - 1767ms
value.ToObject<string>() - 6768ms
value.ToString() - 130ms
Run Code Online (Sandbox Code Playgroud)

    private static void RunPerfTest()
    {
        int loops = 100000000;
        JValue value = new JValue(1000d);

        Stopwatch sw = new Stopwatch();
        sw.Start();
        for (int i = 0; i < loops; i++)
        {
            double x = value.Value<double>();
        }

        sw.Stop();
        Console.WriteLine("value.Value<double>()" + sw.ElapsedMilliseconds);


        sw.Restart();
        for (int i = 0; i < loops; i++)
        {
            double x = value.ToObject<double>();
        }

        sw.Stop();
        Console.WriteLine("value.ToObject<double>()" + sw.ElapsedMilliseconds);
    }
Run Code Online (Sandbox Code Playgroud)