C# 如何使用JSON.NET解析没有标题的JSON数据
我有一些C代码,它发出HTTP web请求以获取访问令牌。对象以以下格式返回:C# 如何使用JSON.NET解析没有标题的JSON数据,c#,json,C#,Json,我有一些C代码,它发出HTTP web请求以获取访问令牌。对象以以下格式返回: { "error_code": 0, "access_token": "*******************", "expires_in": 7200 } 我目前正在将请求设置为字符串对象并对其进行修剪。但这似乎很脆弱,容易失败。我想像这样拿一下代币 字符串myToken=httpWebResponse.access\u token 因此,在看到这篇堆栈溢出文章后,我开始研究Json.NET 这正是我
{
"error_code": 0,
"access_token": "*******************",
"expires_in": 7200
}
我目前正在将请求设置为字符串对象并对其进行修剪。但这似乎很脆弱,容易失败。我想像这样拿一下代币
字符串myToken=httpWebResponse.access\u token
因此,在看到这篇堆栈溢出文章后,我开始研究Json.NET
这正是我想要做的。然而,我似乎无法理解他接受的答案,因为他的响应对象有一个标题响应,而我的没有
我决定查看文档以找到答案,但我也没有找到答案。
他的回答有一个标题,在本例中是“结果”
这是我的C代码
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + appId + "&secret=" + secret);
request.Method = "GET";
request.KeepAlive = false;
request.ContentType = "appication/json";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
/*
JSON Parse Attempt
JObject joResponse = JObject.Parse(response.ToString());
JArray array = (JArray)joResponse[""];
int id = Convert.ToInt32(array[0].ToString());
*/
//////////////////////////
string myResponse = "";
using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
{
myResponse = sr.ReadToEnd();
}
return myResponse;
}
catch (Exception e)
{
return e.ToString();
}
但我只有在取消注释解析行时才会出错
任何帮助都将不胜感激 创建一个类
[DataContract]
public class Response
{
[DataMember(Name = "error_code")]
public int ErrorCode { get; set; }
[DataMember(Name = "access_token")]
public string AccessToken { get; set; }
[DataMember(Name = "expires_in")]
public int ExpiresIn { get; set; }
}
并将json反序列化为强类型对象:
var json =
"{\r\n \"error_code\": 0,\r\n \"access_token\": \"*******************\",\r\n \"expires_in\": 7200\r\n}";
var response = JsonConvert.DeserializeObject<Response>(json);
Console.WriteLine(response.AccessToken);
创建一个类
[DataContract]
public class Response
{
[DataMember(Name = "error_code")]
public int ErrorCode { get; set; }
[DataMember(Name = "access_token")]
public string AccessToken { get; set; }
[DataMember(Name = "expires_in")]
public int ExpiresIn { get; set; }
}
并将json反序列化为强类型对象:
var json =
"{\r\n \"error_code\": 0,\r\n \"access_token\": \"*******************\",\r\n \"expires_in\": 7200\r\n}";
var response = JsonConvert.DeserializeObject<Response>(json);
Console.WriteLine(response.AccessToken);
如果您正在做一些简单的事情,比如从JSON中获取一个值,您可能只想:
string thejson = @"{
""error_code"": 0,
""access_token"": ""*******************"",
""expires_in"": 7200
}";
JObject jobj = JObject.Parse(thejson);
string theToken = jobj["access_token"].ToString();
如果您正在做一些简单的事情,比如从JSON中获取一个值,您可能只想:
string thejson = @"{
""error_code"": 0,
""access_token"": ""*******************"",
""expires_in"": 7200
}";
JObject jobj = JObject.Parse(thejson);
string theToken = jobj["access_token"].ToString();
您可以将动态对象用于更干净的解决方案:
string thejson = @"{
""error_code"": 0,
""access_token"": ""*******************"",
""expires_in"": 7200
}";
dynamic data = Json.Decode(thejson);
string theToken = data.access_token;
您需要System.Web.Helpers您可以使用动态对象来获得更干净的解决方案:
string thejson = @"{
""error_code"": 0,
""access_token"": ""*******************"",
""expires_in"": 7200
}";
dynamic data = Json.Decode(thejson);
string theToken = data.access_token;
您需要System.Web.Helpers为什么不直接反序列化到一个具有3个属性的自定义类中?您没有数组,只需使用JObject即可。@maccettura,因为我是一个不知道如何实现的c noob。当我在谷歌上搜索如何做到这一点时,我一直被引导到Json.Net。最简单的就是我要找的。@在文档中的Internet上,你所需要的应该就是你所需要的了。投票者能解释一下吗?我相信我已经遵守了规则,可以合理地说,像我这样的新手会发现这些信息很有价值。为什么不直接反序列化到一个具有3个属性的自定义类中呢?你没有数组,只需使用JObject即可。@maccettura,因为我是一个不知道如何反序列化的c noob。当我在谷歌上搜索如何做到这一点时,我一直被引导到Json.Net。最简单的就是我要找的。@在文档中的Internet上,你所需要的应该就是你所需要的了。投票者能解释一下吗?我相信我已经遵守了规则,可以合理地说,像我这样的新手会发现这些信息很有价值。我正在投票,因为即使我没有使用这个解决方案,我还是测试了它,发现它有效。这是一个很好的信息。我认为属性是[JsonPropertysomeName]@maccettura。你是对的,它将与JsonProperty一起工作。不过,这也适用于System.Runtime.Serialization中的DataMember属性。我正在进行升级投票,因为尽管我没有使用此解决方案,但我测试了它,发现它有效。这是一个很好的信息。我认为属性是[JsonPropertysomeName]@maccettura。你是对的,它将与JsonProperty一起工作。但是,这也适用于System.Runtime.Serialization中的DataMember属性