将Json.Net JValue转换为整数

23

我尝试过:

JValue myJValue = getJValue(someVar);
int storedValue = JsonConvert.DeserializeObject(myJValue);

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


"DeserializeObject" 只接受一个字符串参数... - stefankmitph
好的,说得对,我有点混淆了。 - trees_are_great
4个回答

42

也许这能帮助您:

int storedValue = myJValue.ToObject<int>(); 

21

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

整数测试:

value.Value<int>() - 2496ms
value.ToObject<int>() - 6259ms

双重测试:

value.Value<double>() - 572ms
value.ToObject<double>() - 6319ms

字符串测试:

value.Value<string>() - 1767ms
value.ToObject<string>() - 6768ms
value.ToString() - 130ms

.

    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);
    }

3

将myJValue转换为int类型并存储在storedValue中。


0
这里已经有很好的答案了,但我想再添加一个可能会对人们有用的。如果你有一个 List<JValue>,我们称之为 myJValueList,并且列表中的 JValue 对象内部持有一个 int,那么你可以通过以下方式获取该 int
foreach(int myInt in myJValueList){
    //do some work with the myInt 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接