0

リストに基づいて、オブジェクトからすべてのプロパティを削除したいと考えています。

その理由は、Web サービス呼び出しで、応答オブジェクトがかなり大きいためです。クライアントがオブジェクトから返されるプロパティを制限できるようにする必要があります。

例えば

/api/movie/1?filter=Name,Id,Gross

public class MovieResponse
{
     public string Name {get;set;}
     public int Id {get;set;}
     public double Gross {get;set;}
     public string Director {get;set;}
     public Rating Rating {get;set;}
}

このような上記のサービス呼び出しに基づいてオブジェクトを返したいと思います

public class MovieResponse
{
     public string Name {get;set;}
     public int Id {get;set;}
     public double Gross {get;set;}
}

aspnetまたはwcfを使用している場合、リクエストのライフサイクルにフックし、応答をクライアントに返す前に最後に行うことは、フィルター/動作を実行して、逆シリアル化される新しいオブジェクトをフィルター処理して返すことだと思いますJSON または XML に

4

2 に答える 2

2

あなたが要求したようにそれが可能だとは思いません.動的オブジェクトの種類を返そうとしていますが、関数の戻り値の型は型指定する必要があり、そのため、プロパティを明確に定義する必要があります( null可能にすることもできます) )。

あなたが試すことができるのは、Dictionaryを返し、その内容に基づいて適切なオブジェクトを再作成することです。

于 2012-09-22T04:35:56.163 に答える
1

JSON を使用してシリアル化することを選択した場合は、@Randolf RF が言ったように、辞書を作成できます。Json.NET を使用すると、辞書はオブジェクトにシリアル化されます。

public static Dictionary<string, object> FilterMovie(MovieResponse movie, string[] fields)
{
    var data = new Dictionary<string, object>();
    var movieType = movie.GetType();

    foreach (var field in fields)
    {
        data.Add(field, movieType.GetField(field).GetValue(movie));
    }

    return data;
}

次に、逆シリアル化は MovieResponse クラスを使用して実行できます。

于 2012-09-22T04:36:23.710 に答える