我正在爲winforms應用程序的OAUTH2登錄。解析HTTP JSON響應 - C#
我必須向我們提供一些憑據的請求,服務器將以令牌和json格式響應。
什麼是解析出令牌值的最佳方法?
下面是響應格式:
{
"access_token":"asdfasdfasdfafbasegfnadfgasdfasdfasdf",
"expires_in":3600,
"token_type":"Bearer"
}
我正在爲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);
對於較少的代碼,你也可以使用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'。您不希望運行時發生編譯器錯誤。 – 2015-03-13 13:58:37
我認爲這取決於他是否對他的工作進行了充分的單元測試。在運行時沒有編譯器錯誤,但我知道你的意思;你想從編譯時檢查中受益。很公平。我會建議遠離任何解釋性語言! – adampolar 2015-03-13 14:43:58
我想使用「動態」方法,但我的C#代碼的一部分位於iOS上的Xamarin環境中。 Apple不允許在iOS上動態生成代碼,因此「動態」不起作用。結束創建類並使用JsonConvert序列化/反序列化oauth信息,如@MotoSV所述。工作很好。但是,只是爲了增加一點關於「動態」的有用程度......我有一些服務器端代碼用於處理任意的JSON數據和一個Mongo DB。我們在那裏使用「動態」。 – Brian 2016-07-28 10:15:06
你應該反序列化,不能序列。一個響應被反序列化... – 2015-03-13 13:52:14
想到他想構建一個響應...在這種情況下,如果您有JSON響應,請將'JsonConvert.SerializeObject'替換爲'JsonConvert.DeserializeObject(jsonString)'。 –
MotoSV
2015-03-13 13:55:45
@Mark ...你能確認...你想從JSON響應字符串中提取'access_token'嗎? – MotoSV 2015-03-13 13:57:01