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

Posted

技术标签:

【中文标题】将动态变量转换为 List<model> 或数组【英文标题】:Converting a dynamic Variable to List<model> or array 【发布时间】:2021-07-04 18:00:45 【问题描述】:

我想将这个带有 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;

我该怎么做?

谢谢...

【问题讨论】:

你能分享你通过 Ajax 发布的 json 吗? 当然。谢谢回复??? .我更新了我的问题。 @ChetanRanpariya 这也是我的问题。我将按照这个问题找到我的答案。干杯@ChetanRanpariya 【参考方案1】:

删除 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&lt;Receipt&gt;,我们应该将我们的DeserializeObject转换为它,所以我们在DeserializeObject之后添加&lt;List&lt;Receipt&gt;&gt;

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

string serv = rr[1].Service;

【讨论】:

天啊,你不仅解决了我的问题。你救了我的命。谢谢你 10000 次。你的回答很棒而且很完整,我没有问题....@ImanS3 欢迎您。?? @SelenaMG【参考方案2】:

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

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


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

```

【讨论】:

不,我正在使用 asp.net 网络表单,我试过了。值为 null 。我试过 Receipt receipt 。在这种状态下receipt 就像一个数组,甚至会出现记录数。但在每条记录中,ServiceOrdernull .@dmalcaba

以上是关于将动态变量转换为 List<model> 或数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将 List<Map<String,dynamic> 转换为 Dart 中的单个变量?

list<model>类型转换为json格式的,在线等大神的帮忙

是否可以将 MVC C# List<int> 转换为 javascript 数组?

ASP.NET Web API将MV响应转换为MVC 4中的json List

使用反射动态给model绑值

C#把 DataTable转换为Model实体