3

C# 環境で Nancy FX を使用して REST サービスを作成しようとしています。私は簡単に Response.AsJson を実行でき、すべてがよさそうです。しかし、応答で null のプロパティを省略したいと考えています。

これを行う方法をまだ理解できていません。

これを行う方法を説明しているヘルプ ドキュメントまたはブログ投稿を誰かが教えてくれませんか。

ありがとう、JP

4

1 に答える 1

3

動的な匿名型を作成し、それを返します。たとえば、次の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の別のインスタンスを返したいとします。dynamicnull

したがって、次のようなコードをお勧めします。

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を含めることができるように、型 を使用する必要があります。問題は、拡張メソッドが動的な型を受け入れることができないことです。これを回避するには、それを として宣言する必要がありますが、動的として使用します。このトリックでは処理のオーバーヘッドが発生しますが、拡張メソッドに渡すときにダイナミックを にキャストできます。ExpandoObjectExpandoObjectAsJson()

于 2013-02-19T11:50:16.803 に答える