JSON时间跨度返回对象(json TimeSpan return object)

2019-10-17 15:00发布

我用Asp.net MVC4(C#)工作,我想加载来自控制器的数据,以查看。 从控制器视图返回一个对象,这个对象类型时间跨度的属性(HH:DD:MM),这是我的功能:

public JsonResult Buscar(string id){
        string Mensaje = "";
        Models.cSinDenuncias oDenuncia = new Models.cSinDenuncias();
        oDenuncia.sd_iddenuncia = id;
        var denuncia = Servicio.RecuperaDenuncia<Models.cSinDenuncias>(ref Mensaje, oDenuncia.getPk(), oDenuncia);
        return Json(denuncia);
    }

denuncia.sd_horadenuncia具有例如此值18时03分53秒,但是当显示在视图中,这是值[对象的对象]在图(Html.TextBoxFor)我无法加载此值:

$('#HoraDen').val(data.sd_horadenuncia);

我怎样才能恢复正确的价值? (HH:MM:SS),而不是[对象的对象]

问候里卡多

Answer 1:

一个TimeSpan是一个复杂的类型。 这意味着,在您的JSON是序列化为这样的:

{
    "sd_horadenuncia": {
        "Ticks": 3000000000,
        "Days": 0,
        "Hours": 0,
        "Milliseconds": 0,
        "Minutes": 5,
        "Seconds": 0,
        "TotalDays": 0.003472222222222222,
        "TotalHours": 0.08333333333333333,
        "TotalMilliseconds": 300000,
        "TotalMinutes": 5,
        "TotalSeconds": 300
    }
}

您正在尝试这种复杂的对象分配到文本字段,这显然是没有意义的。

你可以使用你的控制器动作视图模型来预格式化值:

public ActionResult Buscar(string id)
{
    string Mensaje = "";
    Models.cSinDenuncias oDenuncia = new Models.cSinDenuncias();
    oDenuncia.sd_iddenuncia = id;
    var denuncia = Servicio.RecuperaDenuncia<Models.cSinDenuncias>(ref Mensaje, oDenuncia.getPk(), oDenuncia);
    return Json(new 
    { 
        formattedHoradenuncia = denuncia.sd_horadenuncia.ToString() 
    });
}

然后你的视图中,你可以使用新的属性:

$('#HoraDen').val(data.formattedHoradenuncia);

另一种可能性是访问这个复杂对象的各个属性和自己格式化值:

var hours = data.sd_horadenuncia.Hours;
var minutes = data.sd_horadenuncia.Minutes;
var seconds = data.sd_horadenuncia.Seconds;
$('#HoraDen').val(hours + ':' + minutes + ':' + seconds);


文章来源: json TimeSpan return object