【问题标题】:Parse HTTP JSON Response - C# [duplicate]解析 HTTP JSON 响应 - C# [重复]
【发布时间】:2015-03-13 13:45:21
【问题描述】:

我正在为 winforms 应用程序进行 OAUTH2 登录。

我必须使用一些凭据向我们发出请求,服务器将以令牌和 json 格式响应。

解析令牌值的最佳方法是什么?

这是响应格式:

{
    "access_token":"asdfasdfasdfafbasegfnadfgasdfasdfasdf",
    "expires_in":3600,
    "token_type":"Bearer"
}

【问题讨论】:

    标签: c# json http oauth-2.0


    【解决方案1】:

    使用这些属性创建一个类并使用 JSON.NET JsonConvert.SerializeObject 方法。

    public class MyResponse
    {
        [JsonProperty("access_token")]
        public string AccessToken { get; set; }
        [JsonProperty("expires_in")]
        public int ExpiresIn { get; set; }
        [JsonProperty("token_type")]
        public string TokenType { get; set; }
    }
    
    MyResponse response = new MyResponse();
    // Fill in properties
    string json = JsonConvert.SerializeObject(response);
    

    【讨论】:

    • 你应该反序列化,而不是序列化。响应被反序列化...
    • 以为他想构建一个响应...在这种情况下,如果您有 JSON 响应,则将 JsonConvert.SerializeObject 替换为 JsonConvert.DeserializeObject<MyResponse>(jsonString)
    • @Mark...您能确认...您想从 JSON 响应字符串中提取 access_token 吗?
    【解决方案2】:

    对于更少的代码,您还可以使用具有如下动态类型的 JSON.NET;

    public void JValueParsingTest()
    {
        var jsonString = @"{""Name"":""Rick"",""Company"":""West Wind"",
                            ""Entered"":""2012-03-16T00:03:33.245-10:00""}";
    
        dynamic json = JValue.Parse(jsonString);
    
        // values require casting
        string name = json.Name;
        string company = json.Company;
        DateTime entered = json.Entered;
    
        Assert.AreEqual(name, "Rick");
        Assert.AreEqual(company, "West Wind");            
    }
    

    来源:http://weblog.west-wind.com/posts/2012/Aug/30/Using-JSONNET-for-dynamic-JSON-parsing

    【讨论】:

    • 如果我不需要,我永远不会使用dynamic。您不希望在运行时出现编译器错误。
    • 我想这取决于他是否对他的工作进行了充分的单元测试。运行时没有编译器错误之类的东西,但我知道你的意思;您希望从编译时检查中受益。很公平。我建议远离任何解释语言!
    • 我想使用“动态”方法,但我的部分 C# 代码位于 iOS 上的 Xamarin 环境中。 Apple 不允许在 iOS 上动态生成代码,因此“动态”不起作用。最终创建类并使用 JsonConvert 序列化/反序列化 oauth 信息,如@MotoSV 所述。工作得很好。但是,只是为了添加更多关于“动态”有用性的信息......我有一些服务器端代码,用于处理传入的任意 JSON 数据和 Mongo DB。我们到处使用“动态”。
    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2014-07-12
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多