我遇到了我创建的asp.net REST API的问题。从Get请求返回的JSON字符串具有如下所示的这些尾随空格。
在进行webserches时,我发现了这个链接(Remove trailing spaces from Web API JSON),它显示了删除尾随空格的解决方案。问题是链接不指示需要修改哪些文件(在Visual Studio asp.net解决方案中)。我需要一些帮助,因为我非常喜欢这个。此修复是否会进入Global.asax文件?如果没有,它应该去哪里?是否有任何其他更改我应该考虑而不是提供的链接?
我得到了什么:
{"ID":8,"Site":"EstevanPointCanada","PressureReading":"30.15 ","PressureTrend":"0 "}
我想要的是什么:
{"ID":8,"Site":"EstevanPointCanada","PressureReading":"30.15","PressureTrend":"0"}
非常感谢所提供的任何帮助。
答案 0 :(得分:2)
在生成JSON之前修剪值,或者可以在集合上应用foreach并删除尾随空格。
希望它有所帮助!!
答案 1 :(得分:0)
如果您使用SQL作为数据库且字段的数据类型为“CHAR”,则在将其转换为JSON时,结果将具有尾随空格。
在将序列化为JSON之前,您需要解析将其转换为字符串并使用“Trim()”函数的数据。
如果您可以显示详细的代码,那么找出根本原因&提出解决方案。
答案 2 :(得分:0)
默认的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());
}
您的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}