私は、複雑な JSON 応答を手動で作成するよりも、ViewModel を使用することを好みます。データを返すすべてのメソッドに対して一貫性が保証され、厳密に型指定されたプロパティ IMHO を簡単に操作できます。
public class Response
{
public bool Success { get; set; }
public IEnumerable<User> Users { get; set; }
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
そしてちょうど:
Response response = new Response();
response.Success = true;
// populate the rest of the data
return Json(response);
これには、成功ステータスやエラー メッセージなどの共通データがある場合に、すべての応答に基本クラスを使用できるという利点もあります。
public class ResponseBase
{
public bool Success { get; set; }
public string Message { get; set; }
}
public class UserResponse : ResponseBase
{
IENumerable<User> Users { get; set }
}
ここで、エラーが発生した場合:
return Json(new ResponseBase() { Success = false, Message = "your error" });
またはそれが成功した場合
return Json(new UserResponse() { Success = true, Users = users });
JSON を手動で作成する場合は、次のようにします。
return Json(new { success = true, users = new[] { new { id = 1, Name = "Alice"}, new { id = 2, Name = "Bob"} } });