我正在尝试将包含其中的KeyValuePair对象列表的对象列表以及一些其他属性传递给WebAPI。但是,当我使用像Rest Console这样的东西发送JSON时(或者甚至只是通过Javascript的AJAX调用),对象列表填充正常,它是List>获取正确数量的对象,但值始终为null。
这是我用来调试它的代码。
我创建了一个WebApi方法来给我一个MyModel项列表,所以我可以看到JSON是如何创建它们的。
performBackgroundTask
这让我回到了以下JSON:
[HttpPost]
public JsonResult GetSavedItemsJson(int accountId)
{
var tmpItem = new List<MyModel>();
tmpItem.Add( new MyModel
{
ItemType = "Item1",
MinCount = 3000,
MaxCount = 5000,
KeyValuePairs = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("MinItems", "3.0"),
new KeyValuePair<string, string>("MaxItems", "11.0")
}
});
tmpItem.Add(new MyModel
{
ItemType = "Item2",
MinCount = 1500,
MaxCount = 2500,
KeyValuePairs = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("PaymentMin", "150"),
new KeyValuePair<string, string>("PaymentMax", "500")
}
});
var result = new JsonResult
{
MaxJsonLength = int.MaxValue,
Data = tmpItem
};
return result;
}
我尝试添加其他属性并将项目列表设为数组。
[
{
"ItemType ":"Item1",
"KeyValuePairs":[
{
"Key":"MinItems",
"Value":"3.0"
},
{
"Key":"MaxItems",
"Value":"11.0"
}
],
"MinCount ":3000,
"MaxCount ":5000
},
{
"ItemType ":"Item2",
"KeyValuePairs":[
{
"Key":"PaymentMin",
"Value":"150"
},
{
"Key":"PaymentMax",
"Value":"500"
}
],
"MinCount ":1500,
"MaxCount ":2500
}
]
我的accountId,ItemName和userId数字很好。我还获得了包含MinCount,MaxCount和ItemType值的List项。只是KeyValuePairs列表为每个对象提供了2个项目,但值为null。
以上值我使用REST Console将值发送到WebApi。
如果它有所不同,我使用这个javascript来创建对象。它给了我完全相同的结果。
{
"itemName":"MyTestItem",
"accountId":54321,
"userId":12345,
"itemModels":[
{
"ItemType":"Item1",
"KeyValuePairs":[
{
"Key":"MinItems",
"Value":"3.0"
},
{
"Key":"MinItems",
"Value":"11.0"
}
],
"MinCount":3000,
"MaxCount":5000
},
{
"ItemType":"Item2",
"KeyValuePairs":[
{
"Key":"PaymentMin",
"Value":"150"
},
{
"Key":"PaymentMax",
"Value":"500"
}
],
"MinCount":1500,
"MaxCount":2500
}
]
}
我一定做错了,但在堆栈溢出或其他任何网站上找不到合适的答案时都会遇到问题。
答案 0 :(得分:1)
我在这里做了这个测试并且它有效!查看我的RequestTest对象。
public class RequestTest
{
public string ItemType { get; set; }
public List<KeyValuePair<string,string>> KeyValuePairs { get; set; }
}
[HttpPost]
[ActionName("Test")]
[Route("api/TestInfo/Test")]
public IHttpActionResult Test([FromBody]RequestTest requestTest)
{
Debug.WriteLine(requestTest.ItemType);
Debug.WriteLine(requestTest.KeyValuePairs.First().Key);
Debug.WriteLine(requestTest.KeyValuePairs.First().Value);
return Ok();
}
function saveItem() {
debugger;
var properties = new Array();
properties.push({ "Key": "MaxItems", "Value": "3.0" });
properties.push({ "Key": "MinItems", "Value": "11.0" });
var requestTest = {};
requestTest.ItemType = "ItemString";
requestTest.KeyValuePairs = properties;
$.ajax({
method: "POST",
url: apiURL + '/TestInfo/Test',
data: requestTest,
dataType: "json",
success: function (data) {
console.log("Data: " + data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("Status: " + textStatus);
console.log("Error: " + errorThrown);
}
});
}