解析HTTP JSON响应-C#

解析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

我正在为winforms应用程序开发OAUTH2登录

我必须使用一些凭据向我们的服务器发出请求,服务器将使用令牌和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");            
}

来源:

您应该反序列化,而不是序列化。响应是反序列化的…认为他想要构建响应…在这种情况下,如果您有JSON响应,那么将
JsonConvert.SerializeObject
替换为
JsonConvert.DeserializeObject(jsonString)
@Mark…你能确认一下吗…你想从JSON响应字符串中提取
access\u令牌吗?如果不需要的话,我永远不会使用
dynamic
。您不希望在运行时出现编译器错误。我想这取决于他是否对自己的工作进行了充分的单元测试。运行时没有编译器错误,但我知道你的意思;您希望从编译时检查中获益。很公平。我建议不要使用任何口译语言!我想使用“动态”方法,但我的部分C#代码在iOS上的Xamarin环境中。苹果不允许在iOS上动态生成代码,所以“动态”不起作用。最终创建了类并使用JsonConvert对oauth信息进行序列化/反序列化,如@MotoSV所述。工作得很好。然而,再补充一点关于“动态”有多有用。。。。我有一些服务器端代码,用于处理传入的任意JSON数据和Mongo DB。我们在那里到处使用“动态”。