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