首页 > 解决方案 > 将动态变量转换为列表或数组

问题描述

我想将这个带有 Ajax 的数组发送到 api :

var receipt = Array();

        receipt = [
            { 'Service': 'Saab', 'Order': '20' },
            { 'Service': 'Volvo', 'Order': '12' },
            { 'Service': 'BMW', 'Order': '25' }
        ];

这是我的 Ajax 身体:

var r = JSON.stringify(receipt);
        
        $.ajax({
            type: "POST",
            dataType: "Json",
            contentType: "application/json; charset=utf-8",
            data: r,
            url: "api/Receipt",
            success: function (result) {
                // To Do
                console.info(result);
            },
            error: function (result) {
                console.info(result);
            }
        });

这就是我作为 Json 得到的:

        {[
            {
               "Service": "Saab",
               "Order": "20"
            },
            {
               "Service": "Volvo",
               "Order": "12"
             },
             {
               "Service": "BMW",
               "Order": "25"
              }
          ]}

我在 api 方面抓住它们像这样:

[Route("api/Receipt")]
    [WebMethod]
    public string Receipt_Turn(object obj)
    {
        dynamic dyn = JsonConvert.DeserializeObject(obj.ToString());

        if (dyn != null)
        {
            return dyn[1].ToString();
        }
        else
        {
            return "false";
        }

    }

它有效,该部分return dyn[1].ToString()返回我的数组的第二条记录。但我想将此动态变量转换为模型的列表或数组。

这是我的模型:

[Serializable()]
    public class Receipt
    {
        public string Service { get; set; }
        public string Order { get; set; }
    }

我想这样处理它:

string serv = receipt[1].Service;

我该怎么做 ?

谢谢...

标签: c#asp.netjsonajaxtype-conversion

解决方案


删除 JS 脚本中的数组部分并像这样编写:

var receipt = [
            { 'Service': 'Saab', 'Order': '20' },
            { 'Service': 'Volvo', 'Order': '12' },
            { 'Service': 'BMW', 'Order': '25' }
        ];

在这种形状中,您正在发送一个对象。在您的代码中,我猜您正在发送一个JArray因此它会在从转换JArray为另一种类型时产生一些问题。

在您的 API 端,编辑您的代码如下:

public string Receipt_Turn(object r)
    {

        //important Line Here
        List<Receipt> rr = JsonConvert.DeserializeObject<List<Receipt>>(r.ToString());

        if (rr != null)
        {
            return rr[1].ToString();
        }
        else
        {
            return "false";
        }

    }

如您所见,我们像对象一样获得它,然后我们将能够DeserializeObject像我提到的那样准备好您的部分。

您最常声明您的模型列表,然后在部分DeserializeObject添加您想要将其转换为的类型。

这里因为我们声明List<Receipt>了,我们应该把我们转换DeserializeObject成它,所以我们在<List<Receipt>>之后添加DeserializeObject

最后,您可以随心所欲地使用它。

string serv = rr[1].Service;

推荐阅读