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值.
如果服务只返回"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)