ASP.NET MVC。创建模型以转换为JSON对象(具有动态名称属性)

时间:2016-06-28 16:45:12

标签: c# json asp.net-mvc

我需要像这样生成Json输出:

{
    "01:30":{
        "FREE":true,
        "PRICE":3500
     },
    "03:00":{
        "FREE":true,
        "PRICE":2500
    },
    "13:30":{
        "FREE":true,
        "PRICE":2500
    }
}

我的问题是时间字符串 - 从一个条目到另一个条目的动态。我无法弄清楚如何构造将被序列化为正确的json结果的c#类(模型)。 我的模型现在看起来像这样:

public class ScheduleViewModel
{
    public ScheduleInnerViewModel TIME { get; set; }
}

public class ScheduleInnerViewModel
{
    public bool FREE { get; set; }
    public int PRICE { get; set; }
}

输出结果为(错误):

[
    {"TIME":{
        "FREE":true,
        "PRICE":3500
     }},
    {"TIME":{
        "FREE":true,
        "PRICE":2500
    }},
    {"TIME":{
        "FREE":true,
        "PRICE":2500
    }}
]

我使用标准方法从控制器生成json结果:

List<ScheduleViewModel> model = new List<ScheduleViewModel>();
//fill the model...
return this.Json(model, JsonRequestBehavior.AllowGet);

2 个答案:

答案 0 :(得分:2)

尝试this post中未接受的答案。它使用Dictionary来创建属性名称(键),然后您可以使用ScheduleInnerViewModel作为值,如下所示:

function convertirDialogo(val_, type) {
    val_ = val_.replace(/\\t/g, "<p class=\"create_t\"></p>");

    console.log(type);
    if (type !== 'DIALOG_STYLE_LIST') {
        val_ = val_.replace(/\\n/g, "<br />");
    }

    for (var i = 0; i < val_.length; i++) {
        var _list_created = false;
        if (type === 'DIALOG_STYLE_LIST') {
            var l_ = val_.charAt(i) == "\\" && val_.charAt(i + 1) == "n";
            if (i == 0 && l_ == false) {
                val_ = '<li>' + val_;
            } else {
                if (l_) {
                    val_ = val_.replace(/\\n/g, '<li>');
                }
            }
        }
        var start = i;
        var end = i + 7
        if (val_.charAt(start) == '{' && val_.charAt(end) == '}') {
            var _col = val_.substring(start, end + 1);
            var __col = _col.substring(1, _col.length - 1);

            val_ = val_.replace(_col, "<span style=\"color: #" + __col + ";\">");
        }
    }
    return val_;
}

答案 1 :(得分:2)

如果有一个字典,其中键是一个字符串(你的时间戳),而数据是你的模型类呢?

像:

 wsO.Cells(wsO.Rows.Count, 1).End(xlUp).Offset(0, 5).Value = CDate(rCell.Offset(0, 5))

输出:

lazy loading item on our backlog