2

カスタム IContractResolver を実装して、Web API からオブジェクトの特定のプロパティを動的に除外できるようにしました。たとえば、アクション GetEmployees は、返された各従業員の「Id」プロパティを除外します。

public IEnumerable<Employee> GetEmployees()
{
    var ignoreList = new List<string> {"Id"};
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(ignoreList);
    return db.Employees.AsEnumerable();
}

問題は、同じ方法で、契約リゾルバーをデフォルト値に戻したいということです。このようなもの:

public IEnumerable<Employee> GetEmployees()
{
    var defaultContractResolver = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver;
    var ignoreList = new List<string> {"Id"};
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(ignoreList);
    // Serialize object
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = defaultContractResolver;
    // return serialized object
}

これを達成するための最良の方法は何ですか?

4

1 に答える 1

2

それは間違いなくあなたが試す方法ではありません。この方法でスレッド化の問題が発生します。

1 つの方法は、返されたオブジェクトを変更してId-property を含まないようにすることです。代わりに、より特化したオブジェクトを作成してください。これは私が行く方法です。

HttpResponseMessageまたは、を直接返して、コンテンツを好きなように設定することもできます。ただし、シリアル化とコンテンツの否定を自分で処理する必要があります。

于 2013-04-09T13:08:17.160 に答える