【问题标题】:How to convert some RAW data from an API and save it into variables so i can work with them in C#如何从 API 转换一些 RAW 数据并将其保存到变量中,以便我可以在 C# 中使用它们
【发布时间】:2020-08-16 05:10:48
【问题描述】:

我正在做一个个人项目。它是一个使用 API 与一些 Web 服务通信的 C# 应用程序。

我终于用这几行得到了第一个原始数据:

var client = new RestClient("https://api.abcd.com/token");
            var request = new RestRequest(Method.POST);
            request.AddParameter("username", usr);
            request.AddParameter("password", pass);
            request.AddParameter("grant_type", "password");

在邮递员中,响应(JSON)看起来像:

{"access_token":"aaaaaaa","token_type":"bearer","expires_in":899,"refresh_token":"bbbbbbb",".issued":"周五, 2020 年 5 月 1 日 16:11:36 GMT",".expires":"2020 年 5 月 1 日星期五 16:26:36 GMT",".refreshexpires":"2020 年 5 月 1 日星期五 17:11:36 GMT"}

我的下一步是在 C# 中找到将这些键/值对分成不同变量的方法,以便我可以使用它们。

非常感谢您的帮助。

【问题讨论】:

  • 快速的 stackoverlfow 搜索会为您找到这个问题的很多答案。您正在尝试将字符串数组转换回 C# 字典 - 例如 stackoverflow.com/questions/1385421/…
  • 我已经搜索了 2 天的答案......但没有任何效果......直到下面发布了一些东西......但无论如何感谢您的帮助。

标签: c# json api


【解决方案1】:

但我猜出于小目的不需要创建一个类,而是使用这样的弱类型数据结构:

dynamic responseObject = JsonConvert.DeserializeObject(responseString);
//then use every property like this
responseObject.accessToken ...
responseObject.token_type.....

但您也需要为此使用 Newtonsoft.Json。

【讨论】:

    【解决方案2】:

    您想使用 JSON 反序列化器来执行此操作。

    所以你会创建一个类:

    public class Response {
      public string accessToken {get; set;)
      public string token_type {get; set;)
      .....
    }
    

    然后使用类似 Newtonsoft.Json(可从 NuGet 获得)之类的东西来反序列化:

    using Newtonsoft.Json;
    
    .....
    
    var response = JsonConvert.Deserialise<Response>([RAW TEXT FROM REST CLIENT]);
    

    【讨论】:

      【解决方案3】:

      您可以考虑使用 Json.Net,它允许您将 JSON 反序列化为像这样的对象。请注意,您需要下载该软件包,然后添加using Newtonsoft.Json;

      {
          "varone":"valueone"
      }
      
      public class MyJsonClass
      {
          //JsonProperty isn't strictly required but I personally think it helps when trying to deserialize for sanity sake
          [JsonProperty("varone")]
          public string VarOneValue { get; set; } //The value will be "valueone" on deserialization
      }
      
      var myobj = JsonConvert.DeserializeObject<MyJsonObject>(JSONDATA);
      Console.Write(myobj.VarOneValue); //Will be "valueone"
      

      Nuget CLI:Install-Package Newtonsoft.Json

      页面:https://www.newtonsoft.com/json

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-12
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-13
        相关资源
        最近更新 更多