解析 HTTP JSON 响应 - C# [重复]
Posted
技术标签:
【中文标题】解析 HTTP JSON 响应 - C# [重复]【英文标题】:Parse HTTP JSON Response - C# [duplicate] 【发布时间】:2015-03-13 13:45:21 【问题描述】:我正在为 winforms 应用程序进行 OAUTH2 登录。
我必须使用一些凭据向我们发出请求,服务器将以令牌和 json 格式响应。
解析令牌值的最佳方法是什么?
这是响应格式:
"access_token":"asdfasdfasdfafbasegfnadfgasdfasdfasdf",
"expires_in":3600,
"token_type":"Bearer"
【问题讨论】:
【参考方案1】:使用这些属性创建一个类并使用 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 响应,则将JsonConvert.SerializeObject
替换为 JsonConvert.DeserializeObject<MyResponse>(jsonString)
。
@Mark...您能确认...您想从 JSON 响应字符串中提取 access_token
吗?【参考方案2】:
对于更少的代码,您还可以使用具有如下动态类型的 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
。您不希望在运行时出现编译器错误。
我想这取决于他是否对他的工作进行了充分的单元测试。运行时没有编译器错误之类的东西,但我知道你的意思;您希望从编译时检查中受益。很公平。我建议远离任何解释语言!
我想使用“动态”方法,但我的部分 C# 代码位于 ios 上的 Xamarin 环境中。 Apple 不允许在 iOS 上动态生成代码,因此“动态”不起作用。最终创建类并使用 JsonConvert 序列化/反序列化 oauth 信息,如@MotoSV 所述。工作得很好。但是,只是为了添加更多关于“动态”有用性的信息......我有一些服务器端代码,用于处理传入的任意 JSON 数据和 Mongo DB。我们到处使用“动态”。以上是关于解析 HTTP JSON 响应 - C# [重复]的主要内容,如果未能解决你的问题,请参考以下文章
解析来自 StreamBuilder C# 的 JSON 响应