解析HTTP JSON响应-C#
我正在为winforms应用程序开发OAUTH2登录 我必须使用一些凭据向我们的服务器发出请求,服务器将使用令牌和json格式进行响应 解析令牌值的最佳方法是什么 以下是答复格式:解析HTTP JSON响应-C#,c#,json,http,oauth-2.0,C#,Json,Http,Oauth 2.0,我正在为winforms应用程序开发OAUTH2登录 我必须使用一些凭据向我们的服务器发出请求,服务器将使用令牌和json格式进行响应 解析令牌值的最佳方法是什么 以下是答复格式: { "access_token":"asdfasdfasdfafbasegfnadfgasdfasdfasdf", "expires_in":3600, "token_type":"Bearer" } 使用这些属性创建一个类,并使用JSON.NETJsonConvert.SerializeO
{
"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");
}
来源:您应该反序列化,而不是序列化。响应是反序列化的…认为他想要构建响应…在这种情况下,如果您有JSON响应,那么将
JsonConvert.SerializeObject
替换为JsonConvert.DeserializeObject(jsonString)
@Mark…你能确认一下吗…你想从JSON响应字符串中提取access\u令牌吗?如果不需要的话,我永远不会使用dynamic
。您不希望在运行时出现编译器错误。我想这取决于他是否对自己的工作进行了充分的单元测试。运行时没有编译器错误,但我知道你的意思;您希望从编译时检查中获益。很公平。我建议不要使用任何口译语言!我想使用“动态”方法,但我的部分C#代码在iOS上的Xamarin环境中。苹果不允许在iOS上动态生成代码,所以“动态”不起作用。最终创建了类并使用JsonConvert对oauth信息进行序列化/反序列化,如@MotoSV所述。工作得很好。然而,再补充一点关于“动态”有多有用。。。。我有一些服务器端代码,用于处理传入的任意JSON数据和Mongo DB。我们在那里到处使用“动态”。