解析 HTTP JSON 响应 - C# [重复]

Posted

技术标签:

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

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

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

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

这是响应格式:


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

【问题讨论】:

【参考方案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。我们到处使用“动态”。

以上是关于解析 HTTP JSON 响应 - C# [重复]的主要内容,如果未能解决你的问题,请参考以下文章

用纯 JavaScript 解析 JSON [重复]

解析来自 StreamBuilder C# 的 JSON 响应

在 C# 中解析嵌套的复杂 JSON 响应

解析来自串行窗口的 json 响应

C#:解析对具有 x 属性的类对象的非 JSON 仅数组 api 响应

C# 使用 Newtonsoft 解析 JSON