默认 ASP.NET Web API 模板包含 Json.Net 库。因此,您可以为您的类型实现自己的JsonConverter,这样当您的应用程序序列化该类型的实例时,它将使用您的自定义序列化程序。
假设你的类型是这样的:
public class Resp
{
public int ID { get; set; }
public string Site { get; set; }
public string PressureReading { get; set; }
public int PressureTrend { get; set; }
}
所以自定义序列化器:
public class RespConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Resp);
}
public override bool CanRead
{
get
{
return false;
}
}
public override bool CanWrite
{
get
{
return true;
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var resp = (Resp)value;
writer.WriteStartObject();
writer.WritePropertyName("id");
writer.WriteValue(resp.ID);
writer.WritePropertyName("site");
writer.WriteValue(resp.Site.Trim());
writer.WritePropertyName("pressureReading");
writer.WriteValue(resp.PressureReading.Trim());
writer.WritePropertyName("pressureTrend");
writer.WriteValue(resp.PressureTrend);
writer.WriteEndObject();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// the default deserialization works fine,
// but otherwise we'd handle that here
throw new NotImplementedException();
}
}
您必须在 WebApiConfig 类中的 Register 方法中将该转换器添加到您的转换器中,该类将如下所示:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Add custom converter here!
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new RespConverter());
}
还有你的Get 方法:
public HttpResponseMessage Get(int id)
{
return Request.CreateResponse<Resp>(HttpStatusCode.Accepted,
new Resp {
ID = 1,
Site = " 34.4 ",
PressureReading = "0 ",
PressureTrend = 42 });
}
将返回:{"id":1,"site":"34.4","pressureReading":"0","pressureTrend":42}