【问题标题】:Grab json response from api从 api 获取 json 响应
【发布时间】:2017-12-09 09:31:00
【问题描述】:

请检查下面的控制器。我必须在这个控制器内处理 Json 响应。我的目标是抓住“成功”值的真假。我如何从以下 json 响应中访问该值?我已经尝试过使用 JsSerializer 但没有运气。请检查图片以更好地理解。提前致谢。

查看模型:

public class GoogleRecaptcha
{
    public bool success { get; set; }
    public DateTime challenge_ts { get; set; }
    public string hostname { get; set; }
}

public ActionResult DownloadProcess()
{
    using (BlexzWebDbEntities db = new BlexzWebDbEntities())
    {
        //Validate Google recaptcha below
        var Response = Request["g-recaptcha-response"];
        string SecretKey = "6Lghu-MJoniMPXVf";

        //var client = new WebClient();

        var client = new RestClient("https://www.google.com/recaptcha/api/siteverify");
        var request = new RestRequest(Method.POST);
        request.Method = Method.POST;
        request.Parameters.Clear();
        request.AddParameter("secret", SecretKey);
        request.AddParameter("response", Response);
        var ResultFromGoogle = client.Execute(request).Content;

        JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
        var r = jsSerializer.DeserializeObject(ResultFromGoogle);


        return View();
    }

}

【问题讨论】:

  • 创建一个包含这 3 个属性(bool success 等)的模型并反序列化对您的模型的响应。 - var result = jsSerializer.DeserializeObject<YourModel>(ResultFromGoogle)
  • 我做了同样的事情,但是得到了像这张图片一样的错误 - ibb.co/jBSx0G 并添加了模型。请检查编辑
  • 哎呀,对不起,我没有注意就粘贴了你的 - 它是jsSerializer.Deserialize<YourModel>(ResultFromGoogle)

标签: asp.net-mvc


【解决方案1】:

有多种方法可以做你想做的事:

1.将 JavaScriptSerializer 与强类型模型一起使用:

public class ResultFromGoogle
{
    public bool Success { get; set; }

    public DateTime Challenge_ts { get; set; }

    public string Hostname { get; set; }
}

ResultFromGoogle results = jsSerializer.Deserialize<ResultFromGoogle>(ResultFromGoogle);
var successValue = results.Success;

2。在没有强类型模型的情况下使用 JavaScriptSerializer:

var props = (Dictionary<string, object>)jsSerializer.DeserializeObject(ResultFromGoogle);
var successValue = props["success"];

3.将 JSON.Net 与强类型模型一起使用:

var results = JsonConvert.DeserializeObject<ResultFromGoogle>();
var successValue = results.Success;

4.在没有强类型模型的情况下使用 JSON.Net:

var successValue = JObject.Parse(ResultFromGoogle).GetValue("success");

总的来说,我建议使用强类型模型,因为它提供到所需类型的转换(例如,bool 用于 success 属性,DateTime 用于 challenge_ts)。如果您需要访问响应的其他字段,也更方便。

反过来,Json.Net 比 JavaScriptSerializer 灵活得多。您需要安装Json.Net NuGet 才能使用选项#3 和#4。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2019-04-25
    • 2016-08-01
    • 2022-06-28
    • 2020-02-02
    相关资源
    最近更新 更多