C# 格式化JSON响应
==摘要==== 我需要一些帮助来格式化我的JSON响应。我正在使用带有模型和控制器的ASP.Net ==信息==== 我正在ASP.Net中开发web api。我有一个SQL后端,在其中获取一些数据并将其放入DataTable。我的数据表如下所示: +----+-------+-------+ | ID | Title | Users | +----+-------+-------+ | 1 | Test | user1 | | 1 | Test | user2 | +----+-------+-------+ public class Record { public int ID { get; set; } public string Title {get; set;} public string Users {get; set;} } 注意:一条记录可以有多个用户,这就是为什么两行的ID都是1,ID不是实际SQL表行的唯一ID,而是一个外键…无论如何,我离题了 我用C创建了一个模型,如下所示: +----+-------+-------+ | ID | Title | Users | +----+-------+-------+ | 1 | Test | user1 | | 1 | Test | user2 | +----+-------+-------+ public class Record { public int ID { get; set; } public string Title {get; set;} public string Users {get; set;} } 最后,我的控制器看起来像这样 DataBaseHelper db = new DataBaseHelper(); public IEnumerable Get_Record(string id) { // Get DataTable DataTable dt = new DataTable(); dt = db.GetRecord(id); foreach (DataRow row in dt.Rows) { yield return new Record { ID = row.Field("ID"), Title = row.Field("Title"), Users = row.Field("Users") }; } } 当我调用API时,我得到以下信息: [ -{ ID: 1, Title: "Test", Users: "user1" }, -{ ID: 1, Title: "Test", Users: "user2" } ] ==问题==== 如果可能的话,我如何让JSON响应看起来像这样: { "Response": [ { ID: 1, Title: "Test", Users: [ {name: "user1"}, {name: "user2"} ] } ] } 如果这是不可能的,那么这也很好: "Response": [ { ID: 1, Title: "Test", Users: "user1" }, { ID: 1, Title: "Test", Users: "user2" } ]C# 格式化JSON响应,c#,asp.net,json,C#,Asp.net,Json,==摘要==== 我需要一些帮助来格式化我的JSON响应。我正在使用带有模型和控制器的ASP.Net ==信息==== 我正在ASP.Net中开发web api。我有一个SQL后端,在其中获取一些数据并将其放入DataTable。我的数据表如下所示: +----+-------+-------+ | ID | Title | Users | +----+-------+-------+ | 1 | Test | user1 | | 1 | Test | user2 | +----+---
您可以使用匿名对象返回自己的格式 请看这个:
public HttpResponseMessage Get()
{
return this.Request.CreateResponse(
HttpStatusCode.OK,
new { Message = "Hello", Value = 123 });
}
要扩展@Shahrooz-Jefri的答案,您可以返回一个HttpResponseMessage,该消息允许您返回一个匿名对象,但要按要求格式化结果,您需要修改get_Record方法: 使用这种方法,我们首先将调用db.GetRecord的结果转换为Record对象的IEnumerable
从那里,我们可以塑造一个匿名对象,以符合您的格式要求。请注意,在我的回答中,我没有应用任何错误检查;您应该这样做,因为db.GetRecord不返回任何结果,当我们填充响应对象的ID和Title字段时,由于对记录的调用,会导致异常。首先。根据我目前的经验,创建通用响应将是您案例的最佳实践。例如,您可能有这样一个类
public enum Status
{
OK = 1,
ERROR = -1,
}
public class ResponseDTO
{
public static ResponseDTO CreateDynamicResponse(object content)
{
return new ResponseDTO {Status = Status.OK, Content = content};
}
public static ResponseDTO CreateDynamicResponseFromException(RovlerBaseException ex)
{
return new ResponseDTO
{
Status = Status.ERROR,
Message = ex.Message,
};
}
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public Status Status;
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public object Content { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Message { get; set; }
}
在执行操作之后,我创建一个ActionFilterAttribute,以检查该操作刚刚返回的响应中是否存在错误。然后,我将用户CreateDynamicResponse或CreateDynamicResponseFromException与返回对象的状态相关 您需要一个名为Response的成员为Record类型数组的对象。至于漂亮的格式,我不确定。