C# 環境で Nancy FX を使用して REST サービスを作成しようとしています。私は簡単に Response.AsJson を実行でき、すべてがよさそうです。しかし、応答で null のプロパティを省略したいと考えています。
これを行う方法をまだ理解できていません。
これを行う方法を説明しているヘルプ ドキュメントまたはブログ投稿を誰かが教えてくれませんか。
ありがとう、JP
動的な匿名型を作成し、それを返します。たとえば、次のUser
ようなオブジェクトがあるとします。
public class User
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
このタイプのインスタンスを JSON 応答として返したいので、次のようなコードを作成します。
Get["/user/{userid}"] = parameters =>
{
var user = UserService.GetById(Db, (string)parameters.userid);
if (user == null) return HttpStatusCode.UnprocessableEntity;
return Response.AsJson(user);
};
ただし、インスタンスを返すのではなく、プロパティ値が特定のインスタンスのものではない場合にのみプロパティを実装する型User
の別のインスタンスを返したいとします。dynamic
null
したがって、次のようなコードをお勧めします。
Get["/user/{userid}"] = parameters =>
{
var user = UserService.GetById(Db, (string)parameters.userid);
if (user == null) return HttpStatusCode.UnprocessableEntity;
dynamic userDTO = new ExpandoObject();
userDTO.Id = user.Id;
if (!string.IsNullOrEmpty(user.FirstName)) userDTO.FirstName = user.FirstName;
if (!string.IsNullOrEmpty(user.LastName)) userDTO.Lastname = user.LastName;
return Response.AsJson((ExpandoObject)userDTO);
};
注 1データベースからインスタンスId
が正常に返されたことが暗示される
ため、テストする必要はありません。User
注 2アドホックプロパティdynamic
を含めることができるように、型
を使用する必要があります。問題は、拡張メソッドが動的な型を受け入れることができないことです。これを回避するには、それを として宣言する必要がありますが、動的として使用します。このトリックでは処理のオーバーヘッドが発生しますが、拡張メソッドに渡すときにダイナミックを にキャストできます。ExpandoObject
ExpandoObject
AsJson()