0

这是我的情况。我构建了一个旨在填充报告的 Web 服务。它接收可变数量的“发现”,然后生成包含所有发现的报告。

有没有办法使用 JSON 一次发布多个结果并将其绑定到 List 对象?

编辑:

所以更具体地说,一个发现看起来像:

{标题:“标题”,描述:“描述”,评级:“高”}

我希望能够让我的函数看起来像这样:

[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());
//...
}

关于如何让它自动绑定而不是转换的任何想法?

4

3 回答 3

2

是的,但是您的问题太笼统,无法深入回答。使用HttpRequest该类,您可以指定您正在发布帖子并将有效负载设置为 JSON blob。该 blob 可以是对象列表。在服务器端,您可以读取该数据并将其序列化。我建议使用 JSON.NET 来执行此操作。你可以用一种非常静态的方式来做,比如你的列表是一个类型的对象列表A或者B, C, or D继承自A. 如果您在代码中创建这些对象定义,JSON.NET 可以获取原始 json(这些对象的数组)并将其转换为您在代码中定义的对象数组。

json.NET 文档: http: //james.newtonking.com/projects/json-net.aspx HttpRequest 文档:http: //msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx 一个抽象HttpRequest 层: http ://restsharp.org/

于 2013-02-01T20:12:54.297 回答
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),
    ...
    });

或者,

您可以尝试类似(它来自我的代码):

    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() 的值吗?

于 2013-02-02T15:43:34.803 回答
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"
  }
]
于 2017-06-11T10:15:37.487 回答