12

私はしばらくの間 WebAPI を使用してきましたが、通常はキャメル ケースの json シリアライゼーションを使用するように設定しています。

しかし最近、はるかに大規模なプロジェクトに取り組んでいると、より具体的な要件に出くわしました。キャメル ケースの json シリアライゼーションを使用する必要がありますが、クライアント スクリプトとの後方互換性の問題のため、特定のアクションに対してのみ発生させ、回避する必要があります。 (非常に大きな)ウェブサイトの他の部分を壊す。

カスタム コンテンツ タイプを使用することも 1 つのオプションだと思いますが、その場合はクライアント コードでそれを指定する必要があります。

他のオプションはありますか?

ありがとう!

4

1 に答える 1

29

これを試して:

public class CamelCasingFilterAttribute : ActionFilterAttribute
{
    private JsonMediaTypeFormatter _camelCasingFormatter = new JsonMediaTypeFormatter();

    public CamelCasingFilterAttribute()
    {
        _camelCasingFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        ObjectContent content = actionExecutedContext.Response.Content as ObjectContent;
        if (content != null)
        {
            if (content.Formatter is JsonMediaTypeFormatter)
            {
                actionExecutedContext.Response.Content = new ObjectContent(content.ObjectType, content.Value, _camelCasingFormatter);
            }
        }
    }
}

この [CamelCasingFilter] 属性を、キャメルケースにする任意のアクションに適用します。返送しようとしていた JSON 応答を取得し、代わりにプロパティ名にキャメル ケースを使用するように変換します。

于 2013-01-25T23:51:23.047 に答える