c# - AJAX POST 复杂 JSON 到 MVC4 Controller

标签 c# ajax json asp.net-mvc-4 data-binding

我有一个复杂的 JSON 对象,我想将其传递到 MVC4 Controller 路由。

{
"name": "Test",
"description": "Description",
"questions": [
    {
        "id": "1",
        "type": "1",
        "text": "123",
        "answers": [
            {
                "answer": "123",
                "prerequisite": 0
            },
            {
                "answer": "123",
                "prerequisite": 0
            }
        ],
        "children": [
            {
                "id": "2",
                "type": "2",
                "text": "234",
                "answers": [
                    {
                        "answer": "234",
                        "prerequisite": 0
                    },
                    {
                        "answer": "234",
                        "prerequisite": 0
                    }
                ],
                "children": []
            }
        ]
    }
]

我定义了这些 ViewModel:

public class FormDataTransformContainer
{
    public string name { get; set; }
    public string description { get; set; }
    public QuestionDataTransformContainer[] questions;
}

public class QuestionDataTransformContainer {
    public int type { get; set; }
    public string text { get; set; }
    public AnswerDataTransformContainer[] answers { get; set; }
    public QuestionDataTransformContainer[] children { get; set; }
}

public class AnswerDataTransformContainer {
    public string answer { get; set; }
    public int prerequisite { get; set; }
}

这是我要走的路线:

    [HttpPost]
    public ActionResult Create(FormDataTransformContainer formData)
    {

目前,FormDataTransformContainer 上的 name 和 description 属性已设置,但 questions 数组为空。我希望数据绑定(bind)能够解决这个问题,但我认为数据结构的树性质对它来说有点复杂。如果我是对的,最好的解决方案是什么?

最佳答案

questions应该是一个属性,而不是一个字段。我还将数组更改为 IList<> (假设您的序列化库处理得很好),因为这可能更接近它应该的样子,并且允许您使用更通用的接口(interface)而不是特定的实现。

public class FormDataTransformContainer
{
  public string name { get; set; }
  public string description { get; set; }
  public IList<QuestionDataTransformContainer> questions { get; set; }
}

public class QuestionDataTransformContainer {
  public int type { get; set; }
  public string text { get; set; }
  public IList<AnswerDataTransformContainer> answers { get; set; }
  public IList<QuestionDataTransformContainer> children { get; set; }
}

public class AnswerDataTransformContainer {
  public string answer { get; set; }
  public int prerequisite { get; set; }
}

我已经使用 Json.net(我相信 MVC4 的默认设置)测试了这个结构,并且它有效。

关于c# - AJAX POST 复杂 JSON 到 MVC4 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967249/

相关文章:

javascript - JQuery 在 AJAX 查询后重新绑定(bind) vs 绑定(bind)

javascript - 传递的 Json 不被 Controller 接受

java - JSON Jersey 自动序列化包装器问题

c# - 如何更改按钮的 onclientclick 属性服务器端?

javascript - Jquery、ajax 和 JSON : Parsing GET response fails, 但只是有时?

javascript - 如何获取显示一页的内容但单击按钮

javascript - 如何将表行序列化为json对象

c# - 计数线,这个不安全的方法有效吗?

c# - 在 C# 中,有没有一种方法可以使用短前缀而不是每个节点的完整命名空间来生成 XDocument?

c# - 将列添加到数据表数据类型 nvarchar