C# 如何使用JSON.NET解析没有标题的JSON数据

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 这正是我

我有一些C代码,它发出HTTP web请求以获取访问令牌。对象以以下格式返回:

{
  "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属性