解析HTTP JSON响应 - C#

解析HTTP JSON响应 - C#

问题描述:

我正在为winforms应用程序的OAUTH2登录。解析HTTP JSON响应 - C#

我必须向我们提供一些凭据的请求,服务器将以令牌和json格式响应。

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

下面是响应格式:

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

与这些属性创建一个类,并使用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); 
+0

你应该反序列化,不能序列。一个响应被反序列化... – 2015-03-13 13:52:14

+0

想到他想构建一个响应...在这种情况下,如果您有JSON响应,请将'JsonConvert.SerializeObject'替换为'JsonConvert.DeserializeObject (jsonString)'。 – MotoSV 2015-03-13 13:55:45

+0

@Mark ...你能确认...你想从JSON响应字符串中提取'access_token'吗? – MotoSV 2015-03-13 13:57:01

对于较少的代码,你也可以使用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

+1

如果我不需要,我绝不会使用'dynamic'。您不希望运行时发生编译器错误。 – 2015-03-13 13:58:37

+0

我认为这取决于他是否对他的工作进行了充分的单元测试。在运行时没有编译器错误,但我知道你的意思;你想从编译时检查中受益。很公平。我会建议远离任何解释性语言! – adampolar 2015-03-13 14:43:58

+0

我想使用“动态”方法,但我的C#代码的一部分位于iOS上的Xamarin环境中。 Apple不允许在iOS上动态生成代码,因此“动态”不起作用。结束创建类并使用JsonConvert序列化/反序列化oauth信息,如@MotoSV所述。工作很好。但是,只是为了增加一点关于“动态”的有用程度......我有一些服务器端代码用于处理任意的JSON数据和一个Mongo DB。我们在那里使用“动态”。 – Brian 2016-07-28 10:15:06