我有同样的问题。我正在返回一个用于网格填充的对象。它有一些属性,如行、页面、总计等。将合同解析器设置为骆驼案例可以解决顶层属性的问题。但是,如果任何属性包含具有帕斯卡大小写属性名称的对象列表,它不会改变它们的大小写。
所以这就是我为解决这个问题所做的工作。
带有要返回的数据的网格对象
[DataContract]
public class GridProperties<T>
{
[DataMember]
public List<T> Rows { get; set; }
[DataMember]
public int Records { get; set; }
[DataMember]
public int Total { get; set; }
[DataMember]
public int Page { get; set; }
}
这里 Rows 保存对象列表。在这里,我返回了模型对象列表。模型类看起来像:
public class ClientListModel
{
[DataMember(Name = "clientId")]
public int ClientId { get; set; }
[DataMember(Name = "firstName")]
public string FirstName { get; set; }
[DataMember(Name = "lastName")]
public string LastName { get; set; }
[DataMember(Name = "startDate")]
public DateTime? StartDate { get; set; }
[DataMember(Name = "status")]
public string Status { get; set; }
public ClientListModel()
{}
}
下面是我如何从我的 API 控制器返回 JSON 数据
[HttpGet]
public GridProperties<ClientListModel> GetClients(int page)
{
const int rowsToDisplay = 10;
try
{
IEnumerable<ClientListModel> clientList = null;
using (var context = new AngularModelConnection())
{
clientList = context.Clients.Select(i => new ClientListModel()
{
ClientId = i.Id,
FirstName = i.FirstName,
LastName = i.LastName,
StartDate = i.StartDate,
Status = (i.DischargeDate == null || i.DischargeDate > DateTime.Now) ? "Active" : "Discharged"
});
int total = clientList.Count(); //Get count of total records
int totalPages = Convert.ToInt16(Math.Ceiling((decimal) total/rowsToDisplay)); //Get total page of records
return new GridProperties<ClientListModel>
{
Rows = clientList.Skip((page - 1)*rows).Take(rows).ToList(),
Records = total,
Total = totalPages,
Page = page
};
}
}
catch (Exception exc)
{
ExceptionLogger.LogException(exc);
return new GridProperties<ClientListModel>
{
Rows = null,
Records = 0,
Total = 0,
Page = page
};
}
}
[DataMember(Name ="")]
属性指定当对象被序列化时该属性使用什么名称。
希望这可以帮助!