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

时间:2018-10-17 15:53:40

标签: c# json

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

{
  "error_code": 0,
  "access_token": "*******************",
  "expires_in": 7200
}

我当前正在将请求设置为字符串对象并进行修剪。但这似乎很脆弱,容易失败。我只想像这样抓住令牌。

字符串myToken = httpWebResponse.access_token

因此,看到此堆栈溢出后,我开始研究Json.NET。

Parsing Json rest api response in C#

这正是我想要做的。但是,我似乎无法遵循他接受的答案,因为他的响应对象带有标题(“响应”),而我的却没有。

我决定查看文档以找到答案,我在那里也很短。 https://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm

他的回答带有标题,在这种情况下为“结果”。

这是我的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();
    }

但是当我取消注释解析行时,我只会得到一个错误。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:5)

创建课程

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

答案 1 :(得分:3)

如果您做的事情像从JSON中获取一个值一样简单,则可能需要简单地做到:

{{1}}

答案 2 :(得分:1)

您可以将动态对象用于更清洁的解决方案:

string thejson = @"{
""error_code"": 0,
""access_token"": ""*******************"",
""expires_in"": 7200
}";

dynamic data = Json.Decode(thejson);

string theToken = data.access_token;

您将需要System.Web.Helpers