【问题标题】:How to Convert Json Result to Object in c# mvc如何在 c# mvc 中将 Json 结果转换为对象
【发布时间】:2018-08-08 03:35:08
【问题描述】:

我正在尝试将此响应转换为对象,以便我可以使用 c# mvc 应用程序中的对象访问它们。

下面是我做的代码:

 var response = await client.GetAsync("ApiTest?Amount=" + Amount.ToString() + "&WalletAddress=" + WalletAddress.ToString() + "&TokenCode=" + TokenType.ToString());




                                        if (response.IsSuccessStatusCode)
                                        {

                          result = response.Content.ReadAsStringAsync().Result;
                          var test1 = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(result);
(Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(result));

                                           result = await response.Content.ReadAsStringAsync();
                                           var obj =Newtonsoft.Json.JsonConvert.DeserializeObject(result);
                                            return Json(new { Message = "Your Transaction Has Been Completed Successfully!" }, JsonRequestBehavior.AllowGet);

                                        }

以下是 Json 响应,但它是字符串格式:

{"Error":"交易金额必须大于 0","Result":null,"IsSuccess":false,"HttpResponse":{"Headers":[{"Key":"X-Frame-Options","Value":["sameorigin"]},{ "Key":"Strict-Transport-Security","Value":["max-age=31536000"]},{"Key":"Pragma","Value":["no-cache"]},{ "Key":"Access-Control-Allow-Origin","Value":["*"]},{"Key":"Keep-Alive","Value":["timeout=5, max=100" ]},{"Key":"Connection","Value":["Keep-Alive"]},{"Key":"Cache-Control","Value":["no-store, must-revalidate, no-cache, post-check=0, pre-check=0"]},{"Key":"Date","Value":["Wed, 28 Feb 2018 09:43:57 GMT"]},{"Key":"Set-Cookie","Value":["PHPSESSID=3vbjmnpea9i9n871a8knc3s89q7lufpn; 路径=/;安全的; HttpOnly","visid_incap_992349=On7CIEXMQBq9AtX5/PvHQtp5lloAAAAAQUIPAAAAAAACXLL2Z399YXaT6IXztsol+; 到期=格林威治标准时间 2019 年 2 月 27 日星期三 14:49:04;路径=/; 域=.coinpayments.net","incap_ses_478_992349=pCsbJzCRvCFLbgPwODOiBtx5lloAAAAAR8gvl6uEmcAX0kCi3b/2Ig==; 路径=/; 域=.coinpayments.net"]},{"Key":"Server","Value":["Apache"]},{"Key":"X-Iinfo","Value":["5-23697956 -23698018 NNNN CT(1461 273 0) RT(1519811034346 506) q(0 0 17 1) r(18 19) U6"]},{"Key":"X-CDN","Value":["Incapsula"]}],"ContentBody":"{\"error\":\"事务 金额必须大于 0\",\"result\":[]}","StatusCode":200,"IsSuccessStatusCode":true,"RequestUri":"https://www.coinpayments.net/api.php","RequestBody":"cmd=create_transaction\u0026amount=0\ u0026currency1=USD\u0026currency2=LTCT\u0026buyer_email=3Pt5ebwZsMWV2ij1bnFv1yJYk2155PGzGx\u0026version=1\u0026key=c84f65f198e77895f3edc08e7654379785f10567c7c0c61581dp568

任何帮助将不胜感激> 谢谢

【问题讨论】:

  • 到目前为止您尝试过什么?你已经标记了 json.net,所以我猜你知道那个库。您是否研究过文档以了解如何反序列化 JSON?
  • 我试过这个: var response = await client.GetAsync("ApiTest?Amount=" + Amount.ToString() + "&WalletAddress=" + WalletAddress.ToString() + "&TokenCode=" + TokenType .ToString());result = response.Content.ReadAsStringAsync().Result; var test1 = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
  • 结果如何?附言您应该将代码粘贴到可读的问题中,而不是 cmets - 谢谢
  • 我在响应变量中获取 api 调用的结果,然后尝试反序列化,但我给了我不是对象形式的 json 字符串
  • test1 应该是 dynamic 对象。所以它应该有属性。例如test1.Error应包含“交易金额必须大于0”

标签: c# json asp.net-mvc json.net


【解决方案1】:

您可以使用 Visual Studio 的特殊粘贴功能:

复制 JSON 并选择性粘贴:

您将获得以下课程:

public class JsonResponse
{
    public string Error { get; set; }
    public object Result { get; set; }
    public bool IsSuccess { get; set; }
    public Httpresponse HttpResponse { get; set; }
}

public class Httpresponse
{
    public Header[] Headers { get; set; }
    public string ContentBody { get; set; }
    public int StatusCode { get; set; }
    public bool IsSuccessStatusCode { get; set; }
    public string RequestUri { get; set; }
    public string RequestBody { get; set; }
}

public class Header
{
    public string Key { get; set; }
    public string[] Value { get; set; }
}

现在只需使用 Newtonsoft 进行反序列化:

var items = JsonConvert.DeserializeObject<JsonResponse>(json);  

输出:

【讨论】:

  • @NainaBlue 很高兴为您提供帮助。
【解决方案2】:

试试这个:

using Newtonsoft.Json.Linq;
...
var jso = JObject.Parse(content);
string value = jso["propertyname"].Value<string>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多