这是我的情况。我构建了一个旨在填充报告的Web服务。它收到可变数量的“发现”,然后生成一个包含所有发现的报告。
有没有办法一次性使用JSON发布多个结果,并将其绑定到List对象?
编辑:
更具体地说,一个发现看起来像:
{title:“title”,description:“desc”,rating:“High”}
我希望能够让我的功能看起来像这样:
[HttpPost]
public string Post(IList<Finding> findings){
//code...
}
public class Finding{
public string title {get; set;}
//...
}
所以基本上我想将这些JSON发现的数组绑定到IList
更新: 我希望能够自动绑定它。我目前能够通过发布JSON字符串(使用JSON.stringify)来解决方法
这是我的代码:
[HttpPost]
public string Post([FromBody]object jsonString){
IList<Finding> findingList = JsonConvert.DeserializeObject<IList<Finding>>(jsonString.toString());
//...
}
如何让它自动绑定,而不是必须转换?
答案 0 :(得分:2)
是的,但你的问题太笼统而无法深入回答。使用HttpRequest
类,您可以指定您正在发布帖子并使有效内容成为JSON blob。该blob可以是对象列表。在服务器端,您可以读取该数据并将其序列化。我建议使用JSON.NET来做到这一点。您可以以非常静态的方式执行此操作,例如,您的列表是A
类型的对象列表或从B, C, or D
继承的类型A
。如果在代码中创建这些对象定义,JSON.NET可以获取原始json(这些对象的数组)并将其转换为您在代码中定义的对象数组。
json.NET docs: http://james.newtonking.com/projects/json-net.aspx HttpRequest文档: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx HttpRequest的抽象层: http://restsharp.org/
答案 1 :(得分:0)
如果你坚持使用你的解决方案:
[HttpPost]
public string Post([FromBody]object jsonString){
IList<Finding> findingList = JsonConvert.DeserializeObject<IList<Finding>> (jsonString.toString());
//...
}
我认为你可以:
[HttpPost]
public string Post(string jsonString){
IList<Finding> findingList = JsonConvert.DeserializeObject<IList<Finding>> (jsonString);
//...
}
...在你的ajax电话中:
$.ajax({
...
data: JSON.Stringify(data),
...
});
OR,
你可以尝试类似的东西(它来自我的代码):
var LoginFormSubmitHandler = function (e) {
var $form = $(this);
// We check if jQuery.validator exists on the form
if (!$form.valid || $form.valid()) {
$.post($form.attr('action'), $form.serializeArray())
...
...你可以显示$ form.serializeArray()??
的值答案 2 :(得分:0)
这完美无缺。没有丑陋的JSON反序列化。
[ResponseType(typeof(Customer))]
public async Task<IHttpActionResult> PostCustomer(IEnumerable<Customer> customers)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Customers.AddRange(customers);
await db.SaveChangesAsync();
return StatusCode(HttpStatusCode.Created);
}
并致电:
...api/Customers
使用POST表单正文:
网址:... / api /
[
{
"SampleProperty": "SampleValue1"
...
...
},
{
"SampleProperty": "SampleValue2"
}
]