用Json Net解析单个整数

Mat*_*att 0 java json json.net gson .net-4.5

我试图用Json.Net解析一个简单的长整数.这就是响应的样子:

标题:

{
  Transfer-Encoding: chunked
  Date: Fri, 03 Jul 2015 16:15:33 GMT
  Server: Apache-Coyote/1.1
  Content-Type: application/json
}
Run Code Online (Sandbox Code Playgroud)

身体很简单:1435775316000

在使用Java的gson库中,我可以像这样解析它:

Long one = gson.fromJson("1435775316000", Long.class);
Run Code Online (Sandbox Code Playgroud)

我的.Net客户端中有一个方法来解析响应,但它希望它采用Json格式:

    private static JObject sendRequest(String params)
    {
        try
        {

            HttpResponseMessage response = Client.GetAsync(params).Result;

            if (response.IsSuccessStatusCode)
            {
                var jsonResponse = response.Content.ReadAsStringAsync().Result;
                return JObject.Parse(jsonResponse);
            }
            else
            {
                //do something else
            }
        }
        catch (Exception e)
        {
            //throw
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果响应采用Json映射格式,则可以正常工作:{"version":"1435775316000"}

但该服务只返回:1435775316000

同样,响应的标题说它在Json中.如何在Json.Net库中使用它.

编辑: 我可能应该问一下争辩我的案子的正确方法是什么.服务端的开发人员说返回一个整数是好的,认为它对服务实现更有用,并且必须创建一个json对象.我不同意,并且相信它应该返回一个合适的json对象,就像所有其他对所述服务的调用一样.我如何说服服务开发人员这样做?我问得太多了吗?我的意思是,在服务端更容易返回一个简单的int,但这意味着在我的最后我必须检查是否将其解析为对象或令牌json值.

Jon*_*eet 6

如果服务只返回"1435775316000"那么这不是真正的JSON - 或者至少,它不是JSON 对象,这至少是一种更广泛使用的返回JSON的方法.你可以解析它long.Parse:

long value = long.Parse(jsonResponse);
Run Code Online (Sandbox Code Playgroud)

如果你真的需要创建一个JObject,你可以轻松地这样做:

JObject wrapped = new JObject(value);
Run Code Online (Sandbox Code Playgroud)

......但我怀疑这是不是一个好主意.

另一种选择是将其理解为JSON .您可以更改要返回的方法JToken,并使用:

return JToken.Parse(jsonResponse);
Run Code Online (Sandbox Code Playgroud)

这是一个显示工作的示例:

using System;
using Newtonsoft.Json.Linq;

class Test
{ 
    static void Main(string[] args) 
    {
        var jsonObject = "{ \"name\": \"foo\" }";
        var jsonLong = "123456";
        Console.WriteLine(JToken.Parse(jsonObject).GetType()); // JObject
        Console.WriteLine(JToken.Parse(jsonLong).GetType()); // JValue
    }
}
Run Code Online (Sandbox Code Playgroud)