将动态变量转换为 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;
我想将这个带有 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;