自定义ASP.NET Web API输出

时间:2012-12-11 08:34:26

标签: c# asp.net-mvc serialization asp.net-mvc-4 asp.net-web-api

如何自定义ASP.NET Web API的序列化输出?

让我们说,我希望所有的值都是大写的。

1 个答案:

答案 0 :(得分:3)

您可以访问JSON.NET序列化程序设置。使用JSON.NET,您可以使用转换器覆盖转换,例如this datetime one

您也可以通过从抽象JsonConverter继承来实现自己的。有关详细信息,请参阅here

为您的示例创建转换器:

public class UpperCaseStringConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(string);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return reader.Value.ToString();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var outputValue = value as string;
        writer.WriteValue(outputValue == null ? null : outputValue.ToUpper());
    }
}

然后全局注册添加此配置:

来自here

的注册示例
JsonMediaTypeFormatter jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings();
jSettings.Converters.Add(new UpperCaseStringConverter());
jsonFormatter.SerializerSettings = jSettings;

要添加到模型上的单个属性,只需添加注释:

[JsonConverter(typeof(UpperCaseStringConverter))]