MVC3 / JSON:当通过DataContract重命名我的属性名称时,如何使用模型绑定?

在将数据发送到客户端时,我使用
DataContractJsonSerializer为我的模型数据创建JsonResult.我的模型表示要在数据表中显示的数据,我希望仅在JSON中更改模型属性的名称,以便通过线路为每个数据表行发送更简洁的属性名称.现在,我试图通过JSON将数据表单元格值发送到服务器的控制器操作方法.要发回的字段的名称仍然是短名称,模型绑定似乎不喜欢这样.我可以做些什么来使模型绑定工作并保留通过JSON发送备用属性名称的能力?

模型:

[DataContract()]
public class UsageListModel {

    [DataMember(Name = "results")]
    public IEnumerable<UsageModel> Usages { get; set; }
}

[DataContract()]
public class UsageModel {

    [DataMember(Name = "job")]
    public string JobId { get; set; }

    [DataMember(Name = "dt")]
    public DateTime UsageDate { get; set; }

    [DataMember(Name = "qty")]
    public int Quantity { get; set; }

    [DataMember(Name = "uom")]
    public string UnitOfMeasure { get; set; }

    [DataMember(Name = "nts")]
    public string Notes { get; set; }
}

最佳答案 它不是那么优雅,但我通常只是通过创建一个具有那些短名称属性的中间类(我将其称为ViewModel)来实现这一点,并且可以在它与实际模型之间来回转换.虽然看起来工作繁忙,但ViewModel可以超越此限制 – 例如,如果需要,您可以使用它轻松缓存客户端信息,或者在测试中准确地序列化/反序列化客户端的内容.

点赞