【问题标题】:Customizing ASP.NET Web API Output自定义 ASP.NET Web API 输出
【发布时间】:2012-11-28 18:38:25
【问题描述】:

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

假设,我希望所有值都大写。

【问题讨论】:

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


    【解决方案1】:

    您可以访问 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))]
    

    【讨论】:

    • 完美答案。向你致敬!
    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多