利用HTML5+的API实现基于MUI的文件上传_dssy的一点儿笔记_新浪博客

mikel阅读(1516)

利用HTML5+的API实现基于MUI的文件上传_dssy的一点儿笔记_新浪博客,dssy的一点儿笔记,

来源: 利用HTML5+的API实现基于MUI的文件上传_dssy的一点儿笔记_新浪博客

项目中需要用到图片上传,昨天搞整了一下,对我这个菜鸟来说,还是有很多值得注意的地方。

h5+提供了可以调用原生安卓API的功能,当然也能调用camera。需要注意的是,拍照后的保存路径如果不自己设置的话,是使用的hbuilder默认的路径。不过,我把路径打印出来,在genymotion里面居然没有翻到。还有一点,通过h5+调用拍照后照片也不会保存到相册​,但是在真机上是会自动保存的,为了以防万一,可以设置图片保存到本地相册。不多说,贴代码。

页面打开时需要在plus中预加载,这里新建文件夹camera

plus.camera.getCamera返回摄像头管理对象,之后可以对拍照参数进行设置,拍照成功会调用回调函数。使用resolveLocalFileSystemURL可以通过URL参数获取目录对象或文件对象,把entry转换成本地路径之后就可以保存啦。

拍摄照片

通过相册选择照片的方式和获取摄像头的操作差不多,在这里我给了一个f1的全局数组变量。用来存放选择的照片。哦,单选的话就不用数组了可以。多选和单选,可以通过GalleryOptions对象来进行设置:multiple: true.还可以进行好多好多设置。

相册选择照片

好了现在可以进行图片上传了,在这里使用的是二进制流的形式进行上传,同时为了节约资源,有必要对图片进行压缩,这个代码我是扒的DCould论坛上面的。利用canvas对图片进行重绘,要压缩多小,修改w = 320 || w;的数字就行了,我这里是320,300多K的图片传到后台也就150K了。不过可以更小,最好注意按比例压缩。哦,这里是需要导入JQuery.min.js的包的,attr是JQuery下的方法,不然用不了。每次压缩完成之后,用push方法把图片流追加进数组就行了。

压缩图片

好了可以上传啦,上传利用的是mui封装的post方法,跟ajax其实是一样的。h5+其实提供了很多上传方法,比如有一个uploader的接口,也可用来上传,C#的话,可以用handler来接收,不过我不怎么熟悉,需要好好研究研究。

上传

接下来就是后台接收了,在这里使用的是mvc,前端直接请求action,返回图片数组,在转换成图片之前,base64的格式需要把开头一段去掉。不然会报格式错误的。在保存进文件夹的时候,之前代码老是报错:GDI+中发生一般性错误,就是这个。在网上搜索了好久,解决办法为克隆一个bitmap对象,同时Dispose来及时释放掉打开的文件(C#的话使用using{}来限定也可以),不过这个解决方法的应用场景为从文件夹读出然后写入。图片上传还用不到克隆bitmap,最后在我们老大的提示下终于发现,iis对文件夹的写入进行了限制,需要去开启权限,就是要把everyone的权限添加上去,同时还要赋予完全控制权限。这样就可以顺利进行文件写入的操作啦。

C#后台接收

贴一个克隆bitmap的方法,与这次的图片上传没啥关系,留着以后能用到。

bitmap转换

​       最后,我还要感谢老大,以及其他小伙伴,在工作中给了我很多帮助,有这么一群小伙伴在一起真的太好啦!

微信第三方平台微信支付配置没有rootca.pem根证书文件的解决办法-蜘蛛网博客

mikel阅读(2032)

微信第三方平台微信支付配置没有rootca.pem根证书文件的解决办法我们在通过微信第三方平台制作微信活动的时候,很多情况下都需要用到微信支付接口,例如商城类的微信功能,微砍价、微助力、微秒杀、微拼团等功能插件,以及三级分销和微商城直销,都是需要配置微信支付接口的,而涉及到微信红包功能,还需要我们上传微信支付证书,也就是把官方提供的证书上传到微信第三方平台里面,但是最近微信商户平台网站更新了,从3

来源: 微信第三方平台微信支付配置没有rootca.pem根证书文件的解决办法-蜘蛛网博客

信第三方平台微信支付配置没有rootca.pem根证书文件的解决办法

我们在通过微信第三方平台制作微信活动的时候,很多情况下都需要用到微信支付接口,例如商城类的微信功能,微砍价、微助力、微秒杀、微拼团等功能插件,以及三级分销和微商城直销,都是需要配置微信支付接口的,而涉及到微信红包功能,还需要我们上传微信支付证书,也就是把官方提供的证书上传到微信第三方平台里面,但是最近微信商户平台网站更新了,从3月6日起不在提供rootca.pem文件,也就是根证书文件,统一由微信第三方平台服务器提供,一些平台由于功能更新不及时,在上传微信支付证书的时候还是要求用户上传根证书文件(rootca.pem),于是用户就懵了,这个文件到底在哪里呢,别急,继续往下看。
微信第三方平台微信支付配置怎么没有rootca.pem根证书文件

微信人家平台在收到官方的信息后,第一时间更新了程序,网站后台统一为大家提供rootca.pem根证书文件,请点击下面的链接下载rootca.pem根证书文件。

再说一遍,本文件通用,通用,通用

注意一下,这个rootca.pem根证书文件同样适用于其他的微信第三方平台,如果您现在使用的微信第三方还没有更新这个功能,可以下载小编分享出来的文件,上传到你配置证书的地方就可以了。

目前来看,只有微信红包功能是需要上传微信支付证书文件的,包括但不限于微信红包、微信合体红包、微信到店红包、摇一摇红包、微信裂变红包(粉丝红包)、H5游戏红包等功能。由于不同的微信第三方平台开发的功能不一样,就算功能近乎一致,起的名字也未必相同,所以大家记住一点,只要是涉及到微信红包这一块的功能都是需要上传支付证书的。而新注册的公众号,比如认证服务号,如果是刚开通了微信支付功能,那么到微信商户平台申请红包接口以后是需要等3个月才能在微信第三方平台去发红包,若你正好是这一类情况,那您当前就没有必要去上传证书这些东西了,因为即使你上传好了,微信支付接口也都配置好,还是要等到官方规定的时候到了才可以使用发红包的功能。

javascript 时间与时间戳的转换 - 两面一汤 - 博客园

mikel阅读(824)

来源: javascript 时间与时间戳的转换 – 两面一汤 – 博客园

一:时间转时间戳:JavaScript获得时间戳的方法有五种,都是通过实例化时间对象 new Date() 来进一步获取当前的时间戳

1.var timestamp1 = Date.parse(new Date()); // 结果:1477808630000 不推荐这种办法,毫秒级别的数值被转化为000

console.log(timestamp1);

2.var timestamp2 = (new Date()).valueOf(); // 结果:1477808630404 通过valueOf()函数返回指定对象的原始值获得准确的时间戳值

console.log(timestamp2);

3.var timestamp3 = new Date().getTime(); // 结果:1477808630404 ,通过原型方法直接获得当前时间的毫秒值,准确

console.log(timestamp3);

4.var timetamp4 = Number(new Date()) ; //结果:1477808630404 ,将时间转化为一个number类型的数值,即时间戳

console.log(timetamp4);

5.ES5给Date提供了一种获取时间戳的新特性
var timetamp5 = Date.now();                   //结果:1477808630404 

console.log(timetamp5);

打印结果 如下:

 

 

二,时间戳转时间

var timestamp4 = new Date(1472048779952);//直接用 new Date(时间戳) 格式转化获得当前时间

console.log(timestamp4);

console.log(timestamp4.toLocaleDateString().replace(/\//g, “-“) + ” ” + timestamp4.toTimeString().substr(0, 8)); //再利用拼接正则等手段转化为yyyy-MM-dd hh:mm:ss 格式

效果如下:

 

不过这样转换在某些浏览器上会出现不理想的效果,因为toLocaleDateString()方法是因浏览器而异的,比如 IE为2016年8月24日 22:26:19 格式 搜狗为Wednesday, August 24, 2016 22:39:42

 

可以通过分别获取时间的年月日进行拼接,比如:

function getdate() {
            var now = new Date(),
                y = now.getFullYear(),
                m = ("0" + (now.getMonth() + 1)).slice(-2),
                d = ("0" + now.getDate()).slice(-2);
            return y + "-" + m + "-" + d + " " + now.toTimeString().substr(0, 8);
        }

使用git提交项目到码云 - CSDN博客

mikel阅读(988)

来源: 使用git提交项目到码云 – CSDN博客

一、git安装
1、首先在官方网站下载git工具,或者根据以下链接进行下载:http://download.csdn.net/detail/qq_27501889/9788879(此链接版本为git-2.11版本)
2、找到Git-2.11.exe文件,双击安装
3、点击next继续下一步
4、更改安装路径,点击next下一步
5、勾选Additonai icons,创建桌面图标,不想创建桌面图标可不勾选此项,点击next下一步
6、在Adjusting your PATH environment中,选择默认选中的那一个,点击next下一步
7、在Configuring the line ending conversions中,同样选择默认的选项,点击next下一步
8、不用多说,还是默认状态,然后下一步
9、这里勾选上前面两个选项,然后next下一步
10、默认状态,直接下一步,进行安装,安装完成后,finish完成安装
二、初次使用Git时,需要Git进行配置
1、点击桌面上的这个图标,打开Git Bash
2、配置自己的用户名和邮箱
git config –global user.name “你的名字或昵称”
git config –global user.email “你的邮箱”
3、生成并部署SSH key公钥
ssh-keygen -t rsa -C “xxxxx@xxxxx.com”
     输入之后,连续按回车键,不需要做任何更改,会生成SSH key,存放在系统默认路径下
4、查看生成的SSH key
cat ~/.ssh/id_rsa.pub
5、在c:/Users/“你的用户名”/.ssh路径下,找到id_rsa.pub文件
     将里面的内容全部复制下来
6、将SSH key添加到码云账户中
进入码云中,找到修改资料选项
7、在左边找到SSH公钥选项
标题可以任意起一个(eg:key one),然后将刚复制的内容粘贴到公钥里面,点击确定,就添加完成SSH key了。
三、准备工作已经就绪,准备上传自己的第一个项目
1、在码云的个人主页,点击来新建项目
2、完成自己对项目的描述,可以选择是否公开这个项目,点击创建就创建好了自己的远程代码仓库,然后可以编辑README.md文件,来对项目进行描述。
3、在要提交的项目文件夹上右键,选择Git Bash Here
4、在出现的命令框中
git init   ———-初始化git仓库
git remote add origin 你的项目地址 //注:项目地址形式为:http://git.oschina.net/xxx/xxx.git或者 git@git.oschina.net:xxx/xxx.git     用来连接远程码云
5、开始第一次上传你的项目
git add .      –将项目中的所有文件上传
git commit -m ‘对上传文件的注释’
git push origin master    –正式上传至码云中,若上传有问题,可以试试   git push origin master -f 表示舍弃线上的文件,强制推送

List泛型的Find 和 Where 用法范例

mikel阅读(887)

http://blogs.msdn.com/b/kcwalina/archive/2004/06/22/162533.aspx

http://www.cnblogs.com/yuanyuan/archive/2010/06/19/1760987.html

 

 

API Design
Delegates
namespace System {

   public delegate void Action<T>(T obj);

   public delegate bool Predicate<T>(T obj);

   public delegate U Converter<T,U>(T from);

   public delegate int Comparison<T>(T x, T y);

}

List<T>
public class List<T> : … {

   public int FindIndex(Predicate<T> match);

   public int FindIndex(int index, Predicate<T> match);

   public int FindIndex(int index, int count, Predicate<T> match);

 

   public int FindLastIndex(Predicate<T> match);

   public int FindLastIndex(int index, Predicate<T> match);

   public int FindLastIndex(int index, int count, Predicate<T> match);

 

   public List<T> FindAll(Predicate<T> match);

   public T Find(Predicate<T> match);

   public T FindLast(Predicate match);

 

   public bool Exists(Predicate<T> match);

   public bool TrueForAll(Predicate<T> match); 

   public int RemoveAll(Predicate<T> match);

 

   public void ForEach(Action<T> action);

   public void Sort(Comparison<T> comparison);

   public List<U> ConvertAll<U>(Converter<T,U> converter);

}

Finding Even Integers in List<T>
List<int> integers = new List<int>();

For(int i=1; i<=10; i++) integers.Add(i);

List<int> even = integers.FindAll(delegate(int i){

   return i%2==0;

});

Finding Complex Type in List<T>
public class Order {

   public Order(int number, string item) { … }

   public int Number { get { return number; } }

   public string Item { get { return item; } }

   …

}

List<Order> orders = new List<Order>();

int orderNumber = 10;

Order order = orders.Find(delegate(Order o){

   return o.Number==orderNumber;

});

Computing Sum of Integers in List<T>
List<int> integers = new List<int>();

for(int i=1; i<=10; i++) integers.Add(i);

int sum;

integers.ForEach(delegate(int i){ sum+=i; });

Sort Orders in List<T>
List<Order> orders = new List<Order>();

orders.Add(new Order(10,”Milk”));

orders.Add(new Order(5,”Cheese”));

 orders.Sort(delegate(Order x, Order y){

   return Comparer<int>.Default.Compare(x.Number,y.Number);

});

Convert Orders to Order Numbers
List<Order> orders = new List<Order>();

orders.Add(new Order(10,”Milk”));

orders.Add(new Order(5,”Cheese”));

List<int> numbers = orders.ConvertAll(delegate(Order x){

   return o.Number;

});

js 控制台输出 - CSDN博客

mikel阅读(769)

console.log(object[, object, …])在控制台输出一条消息。如果有多个参数,输出时会用空格隔开这些参数。第一个参数可以是一个包含格式化占位符输出的字符串,例如:console.log(“The %s jumped over %d tall buildings”, animal, count);上面的例子可以用下面的无格式化占位符输出的代

来源: js 控制台输出 – CSDN博客

console.log(object[, object, …])
在控制台输出一条消息。如果有多个参数,输出时会用空格隔开这些参数。

第一个参数可以是一个包含格式化占位符输出的字符串,例如:

console.log(“The %s jumped over %d tall buildings”, animal, count);

上面的例子可以用下面的无格式化占位符输出的代码替换:

console.log(“The”, animal, “jumped over”, count, “tall buildings”);

并且,这两种方式是可以组合使用的。如果使用了格式化占位符,而提供的参数的个数多于占位符的个数,那么,多余的参数会以空格分隔的方式附加在字符串后面,就像:

console.log(“I am %s and have:”, myName, thing1, thing2, thing3);

如果参数是一个JavaScript对象,那么在控制台输出的就不是静态文字,而是一个可交互的超链接,点击超链接可以查看该对象的HTML, CSS, Script, DOM窗口,可用格式化字符串%o代替JavaScript对象。

console.log(“Body tag is %o”, document.body);

格式化字符串列表:

格式化字符串 类型
%s 字符串
%d, %i 整型(暂不支持数字型)
%f 浮点型 (暂不支持数字型) 
%o 链接对象

console.Debug(object[, object, …])
在控制台输出一条消息,包含一个指向代码调用位置的超链接。假如是直接在控制台输入该命令,就不会出现超链接(和console.log()一样)。

console.info(object[, object, …])
在控制台输出一条带有“信息”图标的消息和一个指向代码调用位置的超链接。

console.warn(object[, object, …])
在控制台输出一条带有“警告”图标的消息和一个指向代码调用位置的超链接。

console.error(object[, object, …])
在控制台输出一条带有“错误”图标的消息和一个指向代码调用位置的超链接。

console.assert(expression[, object, …])
测试表达式expression是否为真。如果不是真,会在控制台写一条消息并抛出异常

console.dir(object)
以列表形式输出一个对象的所有属性,有点和你查看DOM窗口相类似。

console.dirxml(node)
输出一个HTML或者XML元素的XML源代码。和你在HTML窗口看到的相似。

console.trace()
Prints an interactive stack trace of JavaScript execution at the point where it is called.

The stack trace details the functions on the stack, as well as the values that were passed as arguments to each function. You can click each function to take you to its source in the Script tab, and click each argument value to inspect it in the DOM or HTML tabs.

console.group(object[, object, …])
输出一条消息,并打开一个嵌套块,块中的内容都会缩进。调用console.groupEnd()关闭块。该命令可以嵌套使用。

console.groupEnd()
关闭最近一个由console.group打开的块。

console.time(name)
创建一个名字为name的计时器,调用console.timeEnd(name)停止计时器并输出所耗时间(毫秒)。

console.timeEnd(nam

C#实现JSON序列化与反序列化 - wuln - 博客园

mikel阅读(1363)

来源: C#实现JSON序列化与反序列化 – wuln – 博客园

JSON(JavaScript Object Notation)——JavaScript对象表示法,是JavaScript用来处理数据的一种格式,大部分是用来处理JavaScript和web服务器端之间的数据交换,把后台web服务器的数据传递到前台,然后使用JavaScript进行处理,例如ajax等,是独立于语言和平台的轻量级的数据交换格式。

JSON的数据类型:

  • number:和JavaScript的number完全一致;
  • boolean:就是JavaScript的true或false;
  • string:就是JavaScript的string;
  • null:就是JavaScript的null;
  • array:就是JavaScript的Array表示方式——[];
  • object:就是JavaScript的{ … }表示方式。

以及上面的任意组合。并且,JSON还定死了字符集必须是UTF-8。为了统一解析,JSON的字符串规定必须用双引号””,Object的键也必须用双引号””,如果JSON中含有转义字符,则需要转义。

1、使用 JavaScriptSerializer类实现序列化
namespace: System.Web.Script.Serialization
eg:

复制代码
 1 // 序列化
 2 private string ObjectToJson(Person obj)
 3 {
 4     JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
 5     return jsonSerialize.Serialize(obj);
 6 }
 7 // 反序列化
 8 private Person JsonToObject(string jsonStr)
 9 {
10     JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
11     return jsonSerialize.Deserialize<Person>(jsonStr);
12 }
复制代码

注:可用 [ScriptIgnore] 标记不序列化的属性

2、使用 DataContractJsonSerializer类实现序列化

namespace:System.Runtime.Serialization.Json

eg:

复制代码
 1 // 序列化
 2 using (MemoryStream stream =new MemoryStream())
 3 {
 4     DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
 5     jsonSerialize.WriteObject(stream, obj);
 6     jsonStr = Encoding.UTF8.GetString(stream.ToArray());
 7 }
 8 // 反序列化
 9 using (MemoryStream stream =new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
10 {
11     DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
12     obj = (Person)jsonSerialize.ReadObject(stream);
13 }
复制代码

注:可用 [IgnoreDataMember] 标记不序列化的属性

3、使用开源类库Newtonsoft.Json实现序列化

namespace:Newtonsoft.Json

eg:

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data;
 4 using System.Linq;
 5 using System.Web;
 6 using System.Web.UI;
 7 using System.Web.UI.WebControls;
 8 using Newtonsoft.Json;
 9 using Newtonsoft.Json.Linq;
10 
11 namespace DataInterface
12 {
13     public partial class UserLogin : System.Web.UI.Page
14     {
15         protected void Page_Load(object sender, EventArgs e)
16         {
17             string errMsg = string.Empty;
18             if (Request["JsonString"] != null)
19             {
20                 string jsonString = Request["JsonString"].ToString();
21                 JObject array;
22                 string userName = string.Empty, password = string.Empty;
23                 try
24                 {
25                     array = (JObject)JsonConvert.DeserializeObject(jsonString);
26                     userName = array["userName"].ToString().Trim('"');
27                     password = array["password"].ToString().Trim('"').ToUpper();
28                 }
29                 catch
30                 {
31                     errMsg = "传入参数错误";
32                 }
33             }
34         }
35     }
36 }
复制代码
复制代码
 1 string jsonText = string.Empty;
 2 StringWriter sw = new StringWriter();
 3 JsonWriter writer = new JsonTextWriter(sw);
 4 
 5 writer.WriteStartObject();
 6 writer.WritePropertyName("result");
 7 writer.WriteValue("1");
 8 writer.WritePropertyName("msg");
 9 writer.WriteValue("sucess");
10 writer.WriteEndObject();
11 writer.Flush();
12 jsonText = sw.GetStringBuilder().ToString();

ajax中JSON.stringify()和JSON.parse()方法的使用 - CSDN博客

mikel阅读(1348)

我们平时使用ajax向后台传递数据时,通常会传递json格式的数据(写在dataType中),当然这里还有其它格式,比如xml、html、script、text、jsonp格式。json类型的数据包含json对象和json类型的字符串1、json对象示例如下:var jsondata={“Participant”:[{“Name_1″:”1″,”Position_1”:”1

来源: ajax中JSON.stringify()和JSON.parse()方法的使用 – CSDN博客

我们平时使用ajax向后台传递数据时,通常会传递json格式的数据,当然这里还有其它格式,比如xml、html、script、text、jsonp格式。

json类型的数据包含json对象和json类型的字符串

JSON.stringify(),将JSON对象转换为JSON类型的字符串

JSON.parse(),将JSON类型的字符串转换为JSON对象

使用详情见下面4个示例。

1、直接传递json对象,示例如下:

  1. <span style=“font-size:14px;”><script>
  2. var jsondata={“Participant”:[{“Name_1″:”1″,”Position_1″:”1″,”Tel_1″:”1″,”Mobile_1″:”1″,”Ohter_1″:”1”},{“Name_2″:”1″,”Position_2″:”1″,”Tel_2″:”2″,”Mobile_2″:”2″,”Ohter_2″:”2”}]}
  3. $.ajax({
  4.                 type: “POST”,
  5.                 contentType: “application/json;charset=utf-8″,
  6.                 url: “ApplyEdit.aspx/SaveParticipant”,
  7.                 data: jsondata,
  8.                 dataType: “json”,
  9.                 complete: function () { },
  10.                 success: function (result) {
  11.                 },
  12.                 error: function (result, status) { }
  13.             });
  14. </script></span>

2、使用JSON.stringify(),将JSON对象转换为JSON类型的字符串示例如下:

  1. <span style=“font-size:14px;”><script>
  2. var jsondata={“Participant”:[{“Name_1″:”1″,”Position_1″:”1″,”Tel_1″:”1″,”Mobile_1″:”1″,”Ohter_1″:”1”},{“Name_2″:”1″,”Position_2″:”1″,”Tel_2″:”2″,”Mobile_2″:”2″,”Ohter_2″:”2”}]}
  3. $.ajax({
  4.                 type: “POST”,
  5.                 contentType: “application/json;charset=utf-8″,
  6.                 url: “ApplyEdit.aspx/SaveParticipant”,
  7.                 data: JSON.stringify(jsondata),
  8.                 dataType: “json”,
  9.                 complete: function () { },
  10.                 success: function (result) {
  11.                 },
  12.                 error: function (result, status) { }
  13.             });
  14. </script></span>

 

3、直接传递JSON类型的字符串,如下:

  1. <span style=“font-size:14px;”><script>
  2. var jsondata=”{\”name\”:\””+name+”\”,\”password\”:\””+password+”\”}”;
  3. $.ajax({
  4.                 type: “POST”,
  5.                 contentType: “application/json;charset=utf-8″,
  6.                 url: “ApplyEdit.aspx/SaveParticipant”,
  7.                 data: jsondata,
  8.                 dataType: “json”,
  9.                 complete: function () { },
  10.                 success: function (result) {
  11.                 },
  12.                 error: function (result, status) { }
  13.             });
  14. </script></span>

 

4、使用JSON.parse(),将JSON类型的字符串转换为JSON对象,示例如下:

  1. <span style=“font-size:14px;”><script>
  2. var jsondata=”{\”name\”:\””+name+”\”,\”password\”:\””+password+”\”}”;
  3. $.ajax({
  4.                 type: “POST”,
  5.                 contentType: “application/json;charset=utf-8″,
  6.                 url: “ApplyEdit.aspx/SaveParticipant”,
  7.                 data: JSON.parse(jsondata),
  8.                 dataType: “json”,
  9.                 complete: function () { },
  10.                 success: function (result) {
  11.                 },
  12.                 error: function (result, status) { }
  13.             });
  14. </script></span>

C#中json字符串的序列化和反序列化 - 万能的聪哥 - 博客园

mikel阅读(1417)

来源: C#中json字符串的序列化和反序列化 – 万能的聪哥 – 博客园

今日写番茄闹钟程序,打算添加日程安排内容,使用到json格式文件的序列化和反序列化:

什么是 Json ?

       Json【JavaScript对象表示方法】,

       它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,

       并且它很容易被计算机转化和生成,它是完全独立于语言的。

 

Json支持下面两种数据结构:

  • 键值对的集合–各种不同的编程语言,都支持这种数据结构;
  • 有序的列表类型值的集合–这其中包含数组,集合,矢量,或者序列,等等。

Json有下面几种表现形式:

     1.对象

           一个没有顺序的“键/值”,一个对象以花括号“{”开始,并以花括号”}”结束,

在每一个“键”的后面,有一个冒号,并且使用逗号来分隔多个键值对。

例如:var user = {“name”:”Manas”,”gender”:”Male”,”birthday”:”1987-8-8″}

     2.数组

           设置值的顺序,一个数组以中括号”[“开始,并以中括号”]”结束,

并且所有的值使用逗号分隔,

例如:

var userlist = [

{“user”:{“name”:”Manas”,”gender”:”Male”,”birthday”:”1987-8-8″}},
{“user”:{“name”:”Mohapatra”,”Male”:”Female”,”birthday”:”1987-7-7″}}

]

     3.字符串

            任意数量的Unicode字符,使用引号做标记,并使用反斜杠来分隔。

(注意: 引号  逗号  冒号  均为英文状态下半角符号, 且只能是双引号 )

例如: var userlist = “{\”ID\”:1,\”Name\”:\”Manas\”,\”Address\”:\”India\”}”

 

C#中具体如何使用:           

           在C#中我们经常使用下面的工具来解析Json格式的内容

            Newtonsoft.Json,是.Net中开源的Json序列化和反序列化工具,官方地址:http://www.newtonsoft.com/json

具体使用:

1. 右键项目=>Nuget包管理=>添加  Newtonsoft.Json

2. 引入命名空间

1 using Newtonsoft.Json;

3. 定义类

复制代码
     public class Student
     {  
        public int ID { get; set; }
 
        public string Name { get; set; }

        public int Age { get; set; }

        public string Sex { get; set; }
     }
复制代码

4. 序列化和反序列化实体对象

复制代码
//序列化对象
    Student one = new Student()
    { ID = 1, Name = "武松", Age = 250, Sex = "男" }; 

    //序列化
    string jsonData = JsonConvert.SerializeObject(one); 

    Console.WriteLine(jsonData);  //显示结果
    Console.ReadLine();

    //反序列化对象
    string str = "{\"ID\":2,\"Name\":\"鲁智深\",\"Age\":230,\"Sex\":\"男\"}";

    //反序列化
    Student two = JsonConvert.DeserializeObject<Student>(str);

    Console.WriteLine(
           string.Format("学生信息  ID:{0},姓名:{1},年龄:{2},性别:{3}",
           two.ID,two.Name, two.Age,two.Sex));//显示结果
    Console.ReadLine();
复制代码

输出结果:

5. 序列化实体对象集合

复制代码
   //序列化对象集合
   List<Student> oneList = new List<Student>() {
        new Student{ ID = 1, Name = "武大", Age = 260, Sex = "男" },
        new Student{ ID = 2, Name = "武二", Age = 250, Sex = "男" },
        new Student{ ID = 3, Name = "武三", Age = 240, Sex = "女" }
   }; //定义对象

    string jsonData = JsonConvert.SerializeObject(oneList); //序列化

    Console.WriteLine(jsonData);  //显示结果
    Console.ReadLine();
复制代码

显示结果:

6. 反序列化实体对象集合(这里直接使用了 5 中的jsonData 字符串  , 原谅我偷点懒 )

复制代码
   List<Student> twoList = JsonConvert.DeserializeObject<List<Student>>(jsonData);

   foreach(Student stu in twoList)
   {
        Console.WriteLine(
        string.Format("学生信息  ID:{0},姓名:{1},年龄:{2},性别:{3}",
                                     stu.ID, stu.Name, stu.Age, stu.Sex));//显示结果   
    }
    Console.ReadLine();
复制代码

显示结果:

Layui table 组件的使用:初始化加载数据、数据刷新表格、传参数 - LoveLong - 博客园

mikel阅读(4824)

来源: Layui table 组件的使用:初始化加载数据、数据刷新表格、传参数 – LoveLong – 博客园

笔者之前一直使用 bootstrap table ,因为当前项目中主要使用 Layui 框架,于是也就随了 Layui table ,只是在使用的时候出现了一些问题,当然也是怪自己不熟悉的锅吧!

出现的问题:

1、使用 Layui 官方提供的 【转换静态表格】 方式初始化加载时报 id 找不到的错误(自己的锅)

2、传递参数问题(姑且算是 Layui 官方的锅)(自己的锅)

笔者使用的 table 加载刷新方案

有一个页面,左侧是一个 tree,右侧是一个 table,默认 table 加载全数据,当点击 tree 节点时,table 进行筛选,很简单的需求吧!

001这里我们不谈 tree 的使用,将仅仅贴出 table 的相关方法!

首先贴出源表格代码:

<table class="layui-table">
<thead>
<tr>
<th>序号</th>
<th>销售ID</th>
<th>姓名</th>
<th>年份</th>
<th>一月</th>
<th>二月</th>
<th>年度</th>
<th>操作</th>
</tr>
</thead>
</table>
<script type="text/html" id="barDemo1">
    <a class="layui-btn layui-btn-mini" lay-event="edit">编辑</a>
</script>

直接在代码中通过注释讲解:

(function () {
    //加载列表的后端 url
    var getListUrl = '';

    //对于任意一个 table,按照官方的说法,有三种不同的初始化渲染方式,不多介绍,而这里使用的方式姑且看做第三种:转换静态表格 方式
    //转换静态表格方式,自然首先需要有一个已经存在的表格,然后再通过 js 方式转化为 Layui 表格
    //无论哪种方式的 Layui table 初始化自然需要配置项
    //通过转化的方式初始化 Layui table,配置项部分可以在 源table中,部分在js中,源 table 的源代码上文已经给出,下面给出一个示例的 js 中的配置项
    var tableOptions = {
        url: getListUrl, //请求地址
        method: 'POST', //方式
        id: 'listReload', //生成 Layui table 的标识 id,必须提供,用于后文刷新操作,笔者该处出过问题
        page: false, //是否分页
        where: { type: "all" }, //请求后端接口的条件,该处就是条件错误点,按照官方给出的代码示例,原先写成了 where: { key : { type: "all" } },结果并不是我想的那样,如此写,key 将是后端的一个类作为参数,里面有 type 属性,如果误以为 key 是 Layui 提供的格式,那就大错特错了
        response: { //定义后端 json 格式,详细参见官方文档
            statusName: 'Code', //状态字段名称
            statusCode: '200', //状态字段成功值
            msgName: 'Message', //消息字段
            countName: 'Total', //总数字段
            dataName: 'Result' //数据字段
        }
    };

    //
    layui.use(['table', 'layer'], function () {//layui 模块引用,根据需要自行修改
        var layer = layui.layer, table = layui.table;

        //表初始化
        var createTable = function () {
            table.init('EditListTable', tableOptions);
// table lay-filter
   };

        //表刷新方法
        var reloadTable = function (item) {
            table.reload("listReload", { //此处是上文提到的 初始化标识id
                where: {
                    //key: { //该写法上文已经提到
                        type: item.type, id: item.id
                    //}
                }
            });
        };

        //表初始化
        createTable();

        //其他和 tree 相关的方法,其中包括 点击 tree 项调用刷新方法
    });
})();

后端方法:

//本示例中,后台代码写法
public ActionResult GetGoalList(string type, string id)
{
      //
}


//如果按照官方文档条件项,应该是下面的写法
public ActionResult GetGoalList(keyItem key)
{
      //
}
public class keyItem
{
    public string id { get; set; }
    public string type { get; set; }
}