C# 如何在c中读取JsonResult对象#

C# 如何在c中读取JsonResult对象#,c#,jsonresult,C#,Jsonresult,我正在尝试反序列化我的jsonresult,但收到以下错误消息: “无法从System.Web.Mvc.Result转换为字符串” 以下是我的jsonresult: [{"description":"BANANA","quantity":"12","productPrice":"40000","discount":"","isTaxable":true,"finalPrice":"9999","lineItemTotal":"999","orderId":8},{"description":"A

我正在尝试反序列化我的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;
        }
JSONResult包含两个对象(即香蕉和苹果)。所以,我想循环遍历数据,得到两个resultdto。我如何做到这一点

这一行给了我一个错误:`ResultToDTO=JsonConvert.DeserializeObject(数据)

我从视图中发送如下数据:

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

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

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

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

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

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

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

这是因为根据文档:JSONResult已经格式化了。您需要进入jsonResult的data.data对象

尝试替换此:

ResultDto dto = JsonConvert.DeserializeObject<ResultDto>(data);
ResultToDTO=JsonConvert.DeserializeObject(数据);
为此:

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

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

这是因为JSONResult根据文档:已经格式化了。您需要进入jsonResult的data.data对象

尝试替换此:

ResultDto dto = JsonConvert.DeserializeObject<ResultDto>(data);
ResultToDTO=JsonConvert.DeserializeObject(数据);
为此:

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

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

首先将
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)
{
}
var dtos=JsonConvert.DeserializeObject(json); foreach(dto中的var dto) { }
首先将
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)
{
}
var dtos=JsonConvert.DeserializeObject(json); foreach(dto中的var dto) { }
我不知道您是如何在控制器中接受
JsonResult
的,但请停止这样做
JsonResult
用于将数据返回到客户端,而不是从客户端接收数据。您的控制器应该接受一个
ResultDto[]
,它应该通过MVC框架从JSON自动反序列化。然后,你可以继续工作


另外,正如其他人在评论中指出的那样,
isTaxable
bool
orderId
int
,因此请正确键入您的
resultto
属性。

我不知道您是如何在控制器中接受
JsonResult
,但请停止这样做
JsonResult
用于将数据返回到客户端,而不是从客户端接收数据。您的控制器应该接受一个
ResultDto[]
,它应该通过MVC框架从JSON自动反序列化。然后,你可以继续工作


另外,正如其他人在评论中指出的那样,
isTaxable
bool
orderId
int
,因此请正确键入
ResultDto
属性。

试试这个
public JsonResult-CreateLineItems(字符串数据){//您的代码在这里}
isTaxable在json中是bool,orderid是int。使用
string
作为
CreateLineItems
方法的参数类型,而不是
JsonResult
同样,json是一个对象列表,因此,您必须反序列化为
List
isTaxable
is
bool
orderId
is
int
尝试此
public JsonResult CreateLineItems(字符串数据){//您的代码在这里}
isTaxable在json中是bool,orderid是int。使用
string
作为
CreateLineItems
方法的参数类型,而不是
JsonResult
同样,json是一个对象列表,因此,您必须反序列化为
List
isTaxable
is
bool
orderId
is
int
这是一个很好的建议。我将根据你的建议调整我的代码,如果我成功了,我会告诉你。它不起作用。我实际上收到了这样的消息:ResltDto[0]。就这样。就像一根绳子。我像这样传递我的行项目:ajax:data:JSON.stringify(lineitems)@bangbang从您的代码示例来看,您似乎在为
.ajax()
函数发送
数据
属性中的对象。您应该只发送
JSON.stringify(lineitems)
的结果。这是一个很好的建议。我将根据你的建议调整我的代码,如果我成功了,我会告诉你。它不起作用。我实际上收到了这样的消息:ResltDto[0]。就这样。就像一根绳子。我像这样传递我的行项目:ajax:data:JSON.stringify(lineitems)@bangbang从您的代码示例来看,您似乎在为
.ajax()
函数发送
数据
属性中的对象。您应该只发送JSON.stringify(lineitems)的结果。请查看我编辑的问题。根据Tashi的回答,应该使用JsonResult dbe将数据返回视图。那么,如果是这样的话,那么我应该使用什么参数从视图中获取数据?请参见我编辑的问题。根据Tashi的回答,应该使用JsonResult dbe将数据返回视图。那么,如果是这样,那么我应该使用什么参数从视图中获取数据呢?