.Net向微信小程序传回Json被识别为普通string

问题描述

.Net向前台传送Json数据仅被识别为普通的string类型数据。
本次开发环境是.net Framework 4.7.2+微信小程序v2.16.0 (2021-03-03)+MongoDB4.4.4。

  1. 正确的情况:

应该是数组类型可以直接在js文件中调用。
微信小程序正确收到

  1. 错误的情况:

data中收到的message是“image_sec:http…”这样的普通字符串,无法采用json调用方式。

寻根溯源

正确的JSON数据格式有三种表示

 1. 第一种(纯字典)
	{key:value,key:value...}
 2. 第二种(字典包着数组)
	{key:[key:value,key:value],key:value...}
 3. 第三种(数组包着字典)
 	[{key:value,key:value},{key:value}....]

要注意的是传递到前台的数据只有形如上述格式才能被识别,微信小程序的接受请求返回的数据时会再次调用JSON.Parse()方法将String转换为JSON。
因此针对微信小程序后台不必JSON序列化,仅仅需要保持字符串要形如上述三种格式。
这次我传回前台数据一直被识别为String而非JSON array,是因为后台从Mongo数据库查回的数据(就是下面这个从集合里查出来的数据)

Collection<BsonDocument>(“数据库”).Find(new BsonDocument).ToList().ToJson()

返回来的字符串之中有换行、空格的!!!!!!所以不被微信小程序识别。
并且我发现MongoDB中的

"_id": {
    "$oid": "6048a00ede1b97b8bfececc8"
}

如果存在于传回的json中,也是不能被微信小程序识别的,所以一定要排除掉“_id”键值对。

解决方案

public string GetSwiperData()
{
	string conn="mongodb://localhost:27017/?authSource=test"
	var mongo=new MongoClient(conn);
	var db=mongo.GetDatabase("test"); 
    var collection = db.GetCollection<BsonDocument>("集合名");
    //Projection用于排除特定的field
    var projection= Builders<BsonDocument>.Projection.Exclude("_id");
    //取出集合里的所有数据
    var back = collection.Find(new BsonDocument()).Project(projection).ToList().ToJson();
    //使用正则表达式\s匹配空格、回车并且删掉
    string result = Regex.Replace(back, @"\s", "");
    //为了在微信小程序方便取出给结果取个名叫做message
    result ="{"+"\"message\""+":"+result+"}";
    return result;

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值