【发布时间】:2012-11-28 18:38:25
【问题描述】:
如何自定义 ASP.NET Web API 的序列化输出?
假设,我希望所有值都大写。
【问题讨论】:
标签: c# asp.net-mvc serialization asp.net-mvc-4 asp.net-web-api
如何自定义 ASP.NET Web API 的序列化输出?
假设,我希望所有值都大写。
【问题讨论】:
标签: c# asp.net-mvc serialization asp.net-mvc-4 asp.net-web-api
您可以访问 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))]
【讨论】: