第一次用MVC+EF+CodeFirst 做WebAPI,返回的JSON里有很多空格,怎么去字段的空格

flyso 2018-02-05 09:36:22
第一次用MVC+EF+CodeFirst 做WebAPI,返回的JSON里有很多空格,怎么去字段的空格,就是怎么对这些字段返回数据进行处理,能在实体类能做简单处理吗,在不拆箱的情况能处理吗

实体类
public partial class Product
{
public int id { get; set; }

public int? exhid { get; set; }

[StringLength(100)]
public string Title { get; set; }

[StringLength(800)]
public string Intro { get; set; }

public DateTime? addtime { get; set; }
}


api如下
[HttpGet]
public Result<Product> getProduct(int exhid)
{
var r = db.Product.Where(a => a.exhid == exhid).Select(s => new { s.id,s.Title,s.Intro,s.addtime}).ToList();
//r.startTime = ;
Result<Product> ret = new Result<Product>();
ret.code = 1;
ret.msg = "成功";
ret.data = r;
return ret;
}

返回结果
{"code":1,"msg":"成功","data":[{"id":2,"Title":"特展 ","Intro":"1特展12323123 ","addtime":"2018-01-19 12:44:55"}]}
...全文
2138 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
清风道禅 2018-02-06
  • 打赏
  • 举报
回复
将 [StringLength(800)] 改成[MaxLength(800)] 重新生成数据库
csdnFUCKINGSUCKS 2018-02-06
  • 打赏
  • 举报
回复
[StringLength(100)] public string Title { get; set; } [StringLength(800)] public string Intro { get; set; } 估计是数据库做了自动补全 不足长度的会补空格 感觉可以考虑从这块入手解决
  • 打赏
  • 举报
回复
引用 21 楼 flyso 的回复:
怎么写呢。在哪里写

public class Rootobject
{
public int code { get; set;//写在对应需要处理的字符串的这里 }
public string msg { get; set; }
public Datum[] data { get; set; }
}

public class Datum
{
public int id { get; set; }
public string Title { get; set; }
public string Intro { get; set; }
public string addtime { get; set; }
}
写法: public override string ToString(){} 参考: https://msdn.microsoft.com/zh-cn/library/vs/alm/ms173154(v=vs.80)
正怒月神 版主 2018-02-05
  • 打赏
  • 举报
回复
引用 19 楼 flyso 的回复:
我建的就是这样的实体,现在是因为要处理里面的数据,如果不遍历出来,怎么对我喜欢处理的几个字段的数据进行处理呢,比如说有2个字段需要去空格处理,JSON.net我现在用的就是这个
我前面已经说了。你可以对整个json string使用 replace。 虽然内容的空格也会被替换。 但是说白了。人家传递空格过来,数据就是这样的。不应该去空格。 如果需要去空格,照道理,也是前台自己办的事。 如果你一定要是两段去空格。 那么你可以在转成 list<T>后,遍历trim。这时已经在缓存里操作了。 基本无需考虑你的效率问题。
flyso 2018-02-05
  • 打赏
  • 举报
回复
引用 20 楼 xomix 的回复:
[quote=引用 19 楼 flyso 的回复:] [quote=引用 18 楼 hanjun0612 的回复:] [quote=引用 17 楼 flyso 的回复:] [quote=引用 16 楼 hanjun0612 的回复:] [quote=引用 13 楼 flyso 的回复:] 就是要遍历拆出来,处理好了,再装进去,再返回JSON
引用 14 楼 flyso 的回复:
1000次很有可能
我真心不明白 你说的遍历拆出来,处理好了,再装进去在哪一块。 或者你不知道我说的json.net是什么?[/quote] 他并不是一个实体,是List<T>[/quote] json.net 也可以直接反序列化 List<T> 我看你的api其实很简单, 你只要 反序列化这个 Rootobject 取出来的model.data 就是你的List<T>
public class Rootobject
{
public int code { get; set; }
public string msg { get; set; }
public Datum[] data { get; set; }
}

public class Datum
{
public int id { get; set; }
public string Title { get; set; }
public string Intro { get; set; }
public string addtime { get; set; }
}
[/quote] 我建的就是这样的实体,现在是因为要处理里面的数据,如果不遍历出来,怎么对我喜欢处理的几个字段的数据进行处理呢,比如说有2个字段需要去空格处理,JSON.net我现在用的就是这个[/quote] 可以重写个Tostring方法处理。[/quote] 怎么写呢。在哪里写
  • 打赏
  • 举报
回复
引用 19 楼 flyso 的回复:
[quote=引用 18 楼 hanjun0612 的回复:] [quote=引用 17 楼 flyso 的回复:] [quote=引用 16 楼 hanjun0612 的回复:] [quote=引用 13 楼 flyso 的回复:] 就是要遍历拆出来,处理好了,再装进去,再返回JSON
引用 14 楼 flyso 的回复:
1000次很有可能
我真心不明白 你说的遍历拆出来,处理好了,再装进去在哪一块。 或者你不知道我说的json.net是什么?[/quote] 他并不是一个实体,是List<T>[/quote] json.net 也可以直接反序列化 List<T> 我看你的api其实很简单, 你只要 反序列化这个 Rootobject 取出来的model.data 就是你的List<T>
public class Rootobject
{
public int code { get; set; }
public string msg { get; set; }
public Datum[] data { get; set; }
}

public class Datum
{
public int id { get; set; }
public string Title { get; set; }
public string Intro { get; set; }
public string addtime { get; set; }
}
[/quote] 我建的就是这样的实体,现在是因为要处理里面的数据,如果不遍历出来,怎么对我喜欢处理的几个字段的数据进行处理呢,比如说有2个字段需要去空格处理,JSON.net我现在用的就是这个[/quote] 可以重写个Tostring方法处理。
flyso 2018-02-05
  • 打赏
  • 举报
回复
引用 18 楼 hanjun0612 的回复:
[quote=引用 17 楼 flyso 的回复:] [quote=引用 16 楼 hanjun0612 的回复:] [quote=引用 13 楼 flyso 的回复:] 就是要遍历拆出来,处理好了,再装进去,再返回JSON
引用 14 楼 flyso 的回复:
1000次很有可能
我真心不明白 你说的遍历拆出来,处理好了,再装进去在哪一块。 或者你不知道我说的json.net是什么?[/quote] 他并不是一个实体,是List<T>[/quote] json.net 也可以直接反序列化 List<T> 我看你的api其实很简单, 你只要 反序列化这个 Rootobject 取出来的model.data 就是你的List<T>
public class Rootobject
{
public int code { get; set; }
public string msg { get; set; }
public Datum[] data { get; set; }
}

public class Datum
{
public int id { get; set; }
public string Title { get; set; }
public string Intro { get; set; }
public string addtime { get; set; }
}
[/quote] 我建的就是这样的实体,现在是因为要处理里面的数据,如果不遍历出来,怎么对我喜欢处理的几个字段的数据进行处理呢,比如说有2个字段需要去空格处理,JSON.net我现在用的就是这个
正怒月神 版主 2018-02-05
  • 打赏
  • 举报
回复
引用 17 楼 flyso 的回复:
[quote=引用 16 楼 hanjun0612 的回复:] [quote=引用 13 楼 flyso 的回复:] 就是要遍历拆出来,处理好了,再装进去,再返回JSON
引用 14 楼 flyso 的回复:
1000次很有可能
我真心不明白 你说的遍历拆出来,处理好了,再装进去在哪一块。 或者你不知道我说的json.net是什么?[/quote] 他并不是一个实体,是List<T>[/quote] json.net 也可以直接反序列化 List<T> 我看你的api其实很简单, 你只要 反序列化这个 Rootobject 取出来的model.data 就是你的List<T>
public class Rootobject
{
public int code { get; set; }
public string msg { get; set; }
public Datum[] data { get; set; }
}

public class Datum
{
public int id { get; set; }
public string Title { get; set; }
public string Intro { get; set; }
public string addtime { get; set; }
}
flyso 2018-02-05
  • 打赏
  • 举报
回复
引用 16 楼 hanjun0612 的回复:
[quote=引用 13 楼 flyso 的回复:] 就是要遍历拆出来,处理好了,再装进去,再返回JSON
引用 14 楼 flyso 的回复:
1000次很有可能
我真心不明白 你说的遍历拆出来,处理好了,再装进去在哪一块。 或者你不知道我说的json.net是什么?[/quote] 他并不是一个实体,是List<T>
正怒月神 版主 2018-02-05
  • 打赏
  • 举报
回复
引用 13 楼 flyso 的回复:
就是要遍历拆出来,处理好了,再装进去,再返回JSON
引用 14 楼 flyso 的回复:
1000次很有可能
我真心不明白 你说的遍历拆出来,处理好了,再装进去在哪一块。 或者你不知道我说的json.net是什么?
flyso 2018-02-05
  • 打赏
  • 举报
回复
引用 12 楼 qq_16149959 的回复:
这是数据库设计的问题,你的数据库里面字符类型用了Char类型吧,char是定长字符类型,无论你实际有用的字符有多少个,查询出来的结果都是固定的,超过的部分截断,不足的部分用空格补足,简而言之,你数据库中查出来就是有这么多空格,这个你在程序中做什么都是不合理的,改数据库中的类型吧
用的VarChar
flyso 2018-02-05
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
[quote=引用 8 楼 flyso 的回复:] [quote=引用 6 楼 hanjun0612 的回复:] [quote=引用 2 楼 xomix 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 空格你自己 replace一下就好了。 至于反序列化成 实体类,使用 json.net
空格处理建议是trim() 替换可能导致文本中空格丢失。[/quote] trim是两段的,内部无法去空格。 而且道理也很简单,这json中的空格是别人传输过来的。 要么不去掉,要么就全部去掉。[/quote] 常用的做法,就只能拆装箱吗,为了去几个空格,这样感觉好浪费好麻烦[/quote] 首先,我不明白你说的拆装箱是什么意思。 其次,新手都特别喜欢考虑效率问题。这其实很可笑。 你的这个接口每秒钟会被访问1000次吗?[/quote] 1000次很有可能
flyso 2018-02-05
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
[quote=引用 8 楼 flyso 的回复:] [quote=引用 6 楼 hanjun0612 的回复:] [quote=引用 2 楼 xomix 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 空格你自己 replace一下就好了。 至于反序列化成 实体类,使用 json.net
空格处理建议是trim() 替换可能导致文本中空格丢失。[/quote] trim是两段的,内部无法去空格。 而且道理也很简单,这json中的空格是别人传输过来的。 要么不去掉,要么就全部去掉。[/quote] 常用的做法,就只能拆装箱吗,为了去几个空格,这样感觉好浪费好麻烦[/quote] 首先,我不明白你说的拆装箱是什么意思。 其次,新手都特别喜欢考虑效率问题。这其实很可笑。 你的这个接口每秒钟会被访问1000次吗?[/quote] 就是要遍历拆出来,处理好了,再装进去,再返回JSON
传说之心 2018-02-05
  • 打赏
  • 举报
回复
这是数据库设计的问题,你的数据库里面字符类型用了Char类型吧,char是定长字符类型,无论你实际有用的字符有多少个,查询出来的结果都是固定的,超过的部分截断,不足的部分用空格补足,简而言之,你数据库中查出来就是有这么多空格,这个你在程序中做什么都是不合理的,改数据库中的类型吧
正怒月神 版主 2018-02-05
  • 打赏
  • 举报
回复
引用 8 楼 flyso 的回复:
[quote=引用 6 楼 hanjun0612 的回复:] [quote=引用 2 楼 xomix 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 空格你自己 replace一下就好了。 至于反序列化成 实体类,使用 json.net
空格处理建议是trim() 替换可能导致文本中空格丢失。[/quote] trim是两段的,内部无法去空格。 而且道理也很简单,这json中的空格是别人传输过来的。 要么不去掉,要么就全部去掉。[/quote] 常用的做法,就只能拆装箱吗,为了去几个空格,这样感觉好浪费好麻烦[/quote] 首先,我不明白你说的拆装箱是什么意思。 其次,新手都特别喜欢考虑效率问题。这其实很可笑。 你的这个接口每秒钟会被访问1000次吗?
apple8160 2018-02-05
  • 打赏
  • 举报
回复
查看数据库的该字段的内容是不是包含了空格,如果包含最好从添加数据时的根源来处理 json可以到视图来处理一下
正怒月神 版主 2018-02-05
  • 打赏
  • 举报
回复
其实对我来说, 我根本不纠结使用trim还是replace。 如果是我,我基本不会去空格。 人家保存过来的数据就是这样的,那就应该是这样存储和反序列化。
flyso 2018-02-05
  • 打赏
  • 举报
回复
引用 6 楼 hanjun0612 的回复:
[quote=引用 2 楼 xomix 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 空格你自己 replace一下就好了。 至于反序列化成 实体类,使用 json.net
空格处理建议是trim() 替换可能导致文本中空格丢失。[/quote] trim是两段的,内部无法去空格。 而且道理也很简单,这json中的空格是别人传输过来的。 要么不去掉,要么就全部去掉。[/quote] 常用的做法,就只能拆装箱吗,为了去几个空格,这样感觉好浪费好麻烦
正怒月神 版主 2018-02-05
  • 打赏
  • 举报
回复
引用 3 楼 qq_25095899 的回复:
空格replace不严谨,因为有可能内容里本来就有空格
trim是两段的,内部无法去空格。 而且道理也很简单,这json中的空格是别人传输过来的。 要么不去掉,要么就全部去掉。
正怒月神 版主 2018-02-05
  • 打赏
  • 举报
回复
引用 2 楼 xomix 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] 空格你自己 replace一下就好了。 至于反序列化成 实体类,使用 json.net
空格处理建议是trim() 替换可能导致文本中空格丢失。[/quote] trim是两段的,内部无法去空格。 而且道理也很简单,这json中的空格是别人传输过来的。 要么不去掉,要么就全部去掉。
加载更多回复(6)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧