.Net向微信小程序传回Json被识别为普通string_小程序json数据传过来不是数组_狗子七号的博客-程序员宅基地

技术标签: c#  微信小程序  ASP.NET  json  MongoDB  小程序  mongodb  

问题描述

.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;

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44482084/article/details/115036571

智能推荐

云原生简史-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏7次。(1)引子1999年我自己发生了好几件事:1、我购买了两张盗版光盘:Sun Solaris OS、红帽Linux2、正在用COM+、MTS,开发三层架构的局域网内的大型企业商用套件,由Wi..._云原生发展史

机器学习sklearn-支持向量机实例(预测天气)_支持向量机预测实例_kongqing23的博客-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏40次。目录数据预处理完整代码数据预处理导入数据查看相关信息在现实中,我们会先分训练集和测试集,再开始进行数据预处理。这是由于,测试集在现实中往往是不可获得的,或者被假设为是不可获得的,我们不希望我们建模的任何过程受到测试集数据的影响,否则的话,就相当于提前告诉了模型一部分预测的答案。完整代码import pandas as pdimport numpy as npimport sysimport refrom sklearn.model_sele..._支持向量机预测实例

python下载文件传到服务器_用python模拟服务器上传与下载文件-程序员宅基地

文章浏览阅读211次。纯属个人记录性质,大佬绕道!!!参考了网上的代码一.需求说明这是网络课程的大作业,FTP客户端:FTP客户端要求具有图形化界面、上传、下载功能,鼓励实现断点续传功能。对于这个题,其实我很懵。题目说的很不清楚。至少有以下疑问:1 题目只说了客户端,那服务器端呢???没有服务器端,客户端连啥???2 既然肯定要有服务器端,那服务器端可以自己模拟么,还是必须要组服务器?本着省钱省事的原则,既然他没说,那..._python将文件下载到指定服务器上

自定义注解和Annotation类使用-程序员宅基地

文章浏览阅读832次。注解相当于一个标记,是类的组成部分使用者可以使用注解传递参数(自定义注解)注解也可用于检验内容(@Override, @FunctionalInterface)注解也可用于强制运行内容(@before)等等... 自定义注解:格式:public @interface 注解名{格式1:数据类型 属性名();格式2:数据类型 属性名() default 默认值;...

今晚撞鬼了!!修改博客css没有反应,搞了一晚邮件备份博客,没有反应?rrs怎么订阅的?-程序员宅基地

文章浏览阅读654次。今晚撞鬼了!!修改博客css没有反应,搞了一晚邮件备份博客,没有反应?rrs怎么订阅的?

《Python语言程序设计》考试试题(A卷)【附答案】_以下程序中,会出现错误的是( )。 a."深圳".encode("utf-8") b."深圳".de-程序员宅基地

文章浏览阅读7.7k次,点赞11次,收藏72次。《Python语言程序设计》考试试题(A卷) 【末尾-附答案】一、选择题(每题2分,计15题,共30分)1.执行下列语句后,最终的显示结果是( )。>>> value = "Python">>> print("Hello"+value)A.hellopythonB. HelloPythonC. "Hello"PythonD.以上都是错误2.下面哪个变量命名在Python中是合理的? ( )A. 9_boyB. xp-helloC_以下程序中,会出现错误的是( )。 a."深圳".encode("utf-8") b."深圳".decode("utf

随便推点

POJ-1260 Pearls (dp)_poj 1260 pearls 翻译-程序员宅基地

文章浏览阅读265次。题目链接:点击打开链接题意: 给你n种宝石的价格, 数量( 宝石的质量依次升高,). 求花费的最小值.条件是: 1: 你每买一种宝石, 你必须多买10个. 2: 你可以用高质量的宝石代替低质量的宝石.思路: dp[i]代表买到第i种宝石需要花费的最小数目.状态转移方程:dp[i] = min(dp[i],_poj 1260 pearls 翻译

unittest中的测试套件(TestSuite)、装载器(TestLoader、defaultTestLoader)和执行器(TextTestRunner)-程序员宅基地

文章浏览阅读1.1w次,点赞3次,收藏12次。unittest、TestSuite、TestLoader_defaulttestloader

设计模式之策略模式以及实际项目中结合框架使用详解_真实项目使用了策略设计模式怎么写-程序员宅基地

文章浏览阅读390次。策略模式是我们老生常谈的设计模式,也是最经常用到的一种设计模式,主要通过在策略上下文提供接口类型的策略成员变量,传入不同的实现策略来实现不同的业务,主要实现如下实现方式:a) 提供公共接口或抽象类,定义需要使用的策略方法。(策略抽象类)b) 多个实现的策略抽象类的实现类。(策略实现类)c) 环境类(也叫策略上下文),提供接口类型的成员变量,传入了策略..._真实项目使用了策略设计模式怎么写

存储过程和T-SQL语句的执行计划重用性比较_存储过程和执行计划的区别-程序员宅基地

文章浏览阅读1.5k次。存储过程和T-SQL的区别是服务器端是否会对执行计划进行缓存,即每次是否都需要对于要执行的内容重新编译,这不仅仅取决于是存储过程还是T-SQL,还取决于你语句中对参数的使用方式。示例如下:1、直接使用T-SQL语句 select top 100 * from A where month_id=200901month_id值发生变化时,需要重新编译。2、直接使用的常量参数_存储过程和执行计划的区别

自用软件下载地址-程序员宅基地

文章浏览阅读471次。不定期更新,会收集一些自己觉得有用的软件。 · 视频切割工具:Boilsoft Video Splitter Boilsoft Video Splitter是分割速度最快的视频分割器,既可分割视频文件,也可分割音频文件。支持分割、剪切或修剪大的 AVI、MPEG、RM、ASF、WMV、3GP 或 MP4 视频文件为小的视频片断。你可以拖动起点终点标记来指定分割范围,也可以自动将...

分析总结常见的几种移动机器人底盘类型及其运动学_机器人比赛前驱还是后驱-程序员宅基地

文章浏览阅读2.8w次,点赞43次,收藏360次。前言(Preface)最近想做一个关于移动机器人的总结,就先从移动机器人的底盘说起吧。现在移动机器人这么火热,大到无人驾驶车,规矩的有工业上应用得很多的AGV(比如智能物流自动搬运机器人),小到淘宝上面的智能小车,都可以算作移动机器人。移动机器人有各种各样的底盘,有两轮的三轮的四轮的,比如无人车是四轮的阿克曼模型,一般的AGV是两轮差速模型,还有大学生机器人竞赛里面常见的三轮全向轮底盘,四轮全..._机器人比赛前驱还是后驱