将动态变量转换为 List<model> 或数组

Converting a dynamic Variable to List<model> or array

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

var receipt = Array();

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

这是我的 Ajax body :

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() returns 第二条记录部分。但是我想将这个动态变量转换为模型的列表或数组。

这是我的模型:

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

我想这样操作:

string serv = receipt[1].Service;

我该怎么做?

谢谢...

假设您使用的是 .NET Core,如果您执行以下操作,它应该能够自动绑定它:

```
[Route("api/Receipt")]
[WebMethod]
public string Receipt_Turn(List<Receipt> receipts)
{

    if (receipts != null)
    {
        return "seomthing";
    }
    else
    {
        return "false";
    }
}
```

删除 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 转换成它,所以我们在 DeserializeObject.

之后添加 <List<Receipt>>

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

string serv = rr[1].Service;