我有一个复杂的JSON对象,我想传递给MVC4控制器路由。
{
"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上设置了名称和description属性,但是问题数组为空。我希望数据绑定能够解决问题,但我认为数据结构的树型特性对此有些复杂。如果我正确的话,什么是最好的解决方案?
最佳答案
questions
应该是属性,而不是字段。我也将从数组更改为IList<>
(假设您的序列化库可以很好地处理),因为这可能更接近应有的状态,并允许您使用更通用的接口而不是特定的实现。
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的默认设置)测试了此结构,并且它可以工作。