如何在C#中读取JsonResult对象

时间:2018-09-20 09:33:34

标签: c# jsonresult

我正在尝试反序列化jsonresult,但是下面出现错误消息:

  

“无法从System.Web.Mvc.Result转换为字符串”

这是我的jsonresult:

[{"description":"BANANA","quantity":"12","productPrice":"40000","discount":"","isTaxable":true,"finalPrice":"9999","lineItemTotal":"999","orderId":8},{"description":"APPLES","quantity":"20","productPrice":"860000","discount":"","isTaxable":false,"finalPrice":"12000","lineItemTotal":"10000","orderId":8}]

这是我的控制器方法:

 [System.Web.Mvc.HttpPost]
        public JsonResult CreateLineItems(JsonResult data)
        {


           ResultDto dto = JsonConvert.DeserializeObject<ResultDto>(data);
            //for (int i = 0; i < data.Data; i++)
            //{
            //    
            //}

            return data;
        }

这是我的ResultDto类:

public class ResultDto
    {

        public string description { get; set; }
        public string quantity { get; set; }
        public string productPrice { get; set; }
        public string discount { get; set; }
        public bool isTaxable { get; set; }
        public string finalPrice { get; set; }
        public string lineItemTotal { get; set; }
        public int orderId { get; set; }
    }

JsonResut包含两个对象(即香蕉和苹果)。因此,我想遍历数据并获取两个ResultDtos。我该如何实现?

此行给我错误:`ResultDto dto = JsonConvert.DeserializeObject(data);

我正在从视图发送这样的数据:

$.ajax({
                    url: url,
                    data: {
                        data: JSON.stringify(lineitems)
                    },
                    cache: false,
                    type: "POST",
                    success: function (data) {

                    },
                    error: function (reponse) {
                        alert("error : " + reponse);
                    }
                });

在控制器中获取此数据(对象数组)的最佳方法是什么?一旦我在控制器中获得了这些数据,我就想将其保存在数据库中。因此,我不确定JsonResult是否是我的方法的正确返回类型。

4 个答案:

答案 0 :(得分:1)

您已经拥有一个JSon。立即解决问题的方法是将JSONObject字符串化,然后将其反序列化为所需的类型。

string json = JsonConvert.SerializeObject(jsonResult.Data);
ResultDto dto = JsonConvert.DeserializeObject<ResultDto>(json);

答案 1 :(得分:1)

我不知道您如何设法在控制器中接受JsonResult,但请停止这样做。 JsonResult用于向客户端返回数据,而不是从客户端接受数据。您的控制器应接受ResultDto[],该值应由MVC框架从JSON自动反序列化。然后,您可以继续进行操作。

此外,正如评论中其他人所述,isTaxablebool,而orderIdint,因此请正确输入ResultDto属性。

答案 2 :(得分:0)

好吧,因为根据文档jsonResult的JSONResult已格式化。您需要进入jsonResult的data.Data对象。

尝试替换为:

ResultDto dto = JsonConvert.DeserializeObject<ResultDto>(data);

与此:

ResultDto dto = JsonConvert.DeserializeObject<ResultDto>(data.Data);

如果这不起作用,请尝试Sakuto的解决方案。

答案 3 :(得分:0)

首先将isTaxable更改为bool

public class ResultDto
{
    public string description { get; set; }
    public string quantity { get; set; }
    public string productPrice { get; set; }
    public string discount { get; set; }
    public bool isTaxable { get; set; }
    public string finalPrice { get; set; }
    public string lineItemTotal { get; set; }
    public int orderId { get; set; }
}

然后,尝试反序列化

var dtos = JsonConvert.DeserializeObject<IEnumerable<ResultDto>>(json);
foreach(var dto in dtos)
{
}