默认的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();
}
}
你必须到转换器添加到您的转换器在Register
方法在WebApiConfig
类和类将看起来如此:
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());
}
A第二你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}
你如何生成这个JSON?修剪那里的价值! – Scoregraphic
你可以在你创建JSON的地方显示代码吗?正如@分析图表示,你必须修正值有一个简单的解决方案 – feeeper
根据Shailesh Kopardekar的建议发现问题。额外的空格是由于我在这里从 –