我正在使用 ASP.NET MVC4 WebApi 和 Knockout.js。
我的模型由包含 1-N Controls的页面组成。当我需要加载一个新的Page时,我将获取 HTML 视图和 JSON 序列化对象,并将所有内容与 KO 放在一起。由于我的模型非常动态,我将使用 KO 映射插件,因此我不必定义所有的 observables。
这是我的(非常简化的)模型:
public class Page
{
public string Name { get; set; }
public List<Control> Controls { get; set; }
}
public abstract class Control
{
public string Name { get; set; }
public abstract string SayHi();
}
public class Form : Control
{
public override string SayHi()
{
return string.Format("Hi, I'm form {0}", Name);
}
}
public class Datagrid : Control
{
public override string SayHi()
{
return string.Format("Hi, I'm datagrid {0}", Name);
}
}
实际上,我得到了这个(用 JSON.NET 序列化):
[
{
"Name":"pagina1",
"Controls":
[
{"Name":"laTablita"},
{"Name":"theForm"}
]
},
{
"Name":"pagina2",
"Controls":
[
{"Name":"elFormito"},
{"Name":"theDatagrid"}
]
}
]
问题是我需要 JSON 将类名作为根键(因为 KO.Mapping 需要这种方式),而 JSON.NET 序列化程序不包含它。
这就是我需要 JSON 的方式:
[
{
"Name":"pagina1",
"Controls":
[
"Datagrid":
{
"Name":"laTablita"
},
"Form":
{
"Name":"theForm"
}
]
},
{
"Name":"pagina2",
"Controls":
[
"Form":
{
"Name":"elFormito"
},
"Datagrid":
{
"Name":"theDatagrid"
},
]
}
]