1018 lines
30 KiB
C#
1018 lines
30 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.IO;
|
||
using System.Net;
|
||
using System.Reflection;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using System.Web;
|
||
using System.Web.Script.Serialization;
|
||
|
||
namespace PayService
|
||
{
|
||
public class Common
|
||
{
|
||
public enum RetCode
|
||
{
|
||
成功 = 100,
|
||
订单待支付 = 101,
|
||
审核中商品有效 = 102,
|
||
审核中商品无效 = 103,
|
||
审核中业态有误 = 104,
|
||
单据已接收 = 105,
|
||
单据已入库 = 106,
|
||
|
||
请求参数错误 = 201,
|
||
安全验证不通过 = 202,
|
||
会员已经注销 = 203,
|
||
登录失败, 用户名或密码错误 = 204,
|
||
用户不存在 = 205,
|
||
本门店数据未下发 = 206,
|
||
|
||
余额不足 = 300,
|
||
转入退款 = 301,
|
||
未支付 = 302,
|
||
已关闭 = 303,
|
||
已撤销 = 304,
|
||
支付失败 = 305,
|
||
系统异常 = 999
|
||
}
|
||
|
||
public enum RetCode_Check
|
||
{
|
||
成功 = 100,
|
||
等待生成 = 101,
|
||
|
||
门店不存在 = 201,
|
||
|
||
门店存在调拨退货业务 = 300,
|
||
门店正在盘存 = 301,
|
||
有未校验的结账信息 = 302,
|
||
有未扣除库存的单品信息 = 303,
|
||
结账信息未上传 = 304,
|
||
系统异常 = 999
|
||
}
|
||
|
||
#region 交易配置相关属性
|
||
//客户号
|
||
//private const string custom_no = "linkea-test";
|
||
////校验码秘钥
|
||
//private const string shaCode = "DAD7640691B9FAD3665217887F384B6F";
|
||
//AppCode
|
||
private const string app_key = "100083";
|
||
//app_secret 秘钥
|
||
private const string app_secret = "457fbfa0-0076-44c2-b45b-2b3aa84d6750";
|
||
//工作秘钥
|
||
private const string work_key = "D905EEAD570840AC96A34DEB42A29B67";
|
||
////Ksn
|
||
//private const string ksn = "66660000000001";
|
||
////渠道号
|
||
//private const string channel_no = "ALIPAY";
|
||
////微信 WECHAT_PAY
|
||
////交易类型
|
||
//private const string paysEnum = "ALIPAY";
|
||
//请求Url
|
||
private const string postUrl = "http://gateway.ringou.cn/opengw/router/rest.htm";
|
||
|
||
//http://101.68.65.38:7002/opengw/router/rest.htm";
|
||
#endregion
|
||
|
||
public static String Get_Http(String a_strUrl, int timeout)
|
||
{
|
||
string strResult;
|
||
try
|
||
{
|
||
|
||
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl);
|
||
myReq.Timeout = timeout;
|
||
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
|
||
Stream myStream = HttpWResp.GetResponseStream();
|
||
StreamReader sr = new StreamReader(myStream, Encoding.UTF8);
|
||
StringBuilder strBuilder = new StringBuilder();
|
||
while (-1 != sr.Peek())
|
||
{
|
||
strBuilder.Append(sr.ReadLine());
|
||
}
|
||
|
||
strResult = strBuilder.ToString();
|
||
}
|
||
catch (Exception exp)
|
||
{
|
||
|
||
strResult = "错误:" + exp.Message;
|
||
}
|
||
|
||
return strResult;
|
||
}
|
||
|
||
|
||
public static string GetSha256(string str)
|
||
{
|
||
SHA256 sha256 = new SHA256CryptoServiceProvider();//建立一个SHA256
|
||
byte[] source = Encoding.UTF8.GetBytes(str);//将字符串转为Byte[]
|
||
byte[] crypto = sha256.ComputeHash(source);//进行SHA256加密
|
||
|
||
string byteStr = string.Empty;
|
||
if (crypto != null || crypto.Length > 0)
|
||
{
|
||
foreach (var item in crypto)
|
||
{
|
||
byteStr += string.Format("{0:X2}", item);
|
||
}
|
||
}
|
||
return byteStr;
|
||
}
|
||
|
||
public static string GetMD5(string s)
|
||
{
|
||
MD5 md5 = new MD5CryptoServiceProvider();
|
||
byte[] t = md5.ComputeHash(Encoding.GetEncoding("utf-8").GetBytes(s));
|
||
StringBuilder sb = new StringBuilder(32);
|
||
for (int i = 0; i < t.Length; i++)
|
||
{
|
||
sb.Append(t[i].ToString("x").PadLeft(2, '0'));
|
||
}
|
||
return sb.ToString();
|
||
}
|
||
|
||
#region BubbleSort
|
||
public static string[] BubbleSort(string[] r)
|
||
{
|
||
int i, j;
|
||
string temp;
|
||
|
||
bool exchange;
|
||
|
||
for (i = 0; i < r.Length; i++)
|
||
{
|
||
exchange = false;
|
||
|
||
for (j = r.Length - 2; j >= i; j--)
|
||
{
|
||
if (String.CompareOrdinal(r[j + 1], r[j]) < 0)
|
||
{
|
||
temp = r[j + 1];
|
||
r[j + 1] = r[j];
|
||
r[j] = temp;
|
||
|
||
exchange = true;
|
||
}
|
||
}
|
||
|
||
if (!exchange)
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
return r;
|
||
}
|
||
#endregion
|
||
|
||
#region CreatUrl
|
||
public static string CreatUrl(string Amount, string dynamic_id, string out_trade_no, string payType, string subject = "牵软网络")
|
||
{
|
||
int i;
|
||
string custom_no = "", shaCode = "", ksn = "", channel_no = "", paysEnum = "";
|
||
switch (payType)
|
||
{
|
||
case "ALIPAY":
|
||
custom_no = "linkea-qianruan-alipay";
|
||
//校验码秘钥
|
||
shaCode = "9DACF5FBDCF7EE8D5CFFC32E80ADFF51";
|
||
//Ksn
|
||
ksn = "678804280000001";
|
||
//渠道号
|
||
channel_no = "ALIPAY";
|
||
//交易类型
|
||
paysEnum = "ALIPAY";
|
||
break;
|
||
case "WECHAT_PAY":
|
||
custom_no = "linkea-qianruan-wechat";
|
||
//校验码秘钥
|
||
shaCode = "3C9D77299B35012BC02BDAB8B1000C29";
|
||
//Ksn
|
||
ksn = "678804280000002";
|
||
//渠道号
|
||
channel_no = "WECHAT_PAY";
|
||
//交易类型
|
||
paysEnum = "WECHAT_PAY";
|
||
break;
|
||
}
|
||
//构造数组;
|
||
string[] Oristr ={
|
||
"access_token=",
|
||
"app_key="+ app_key,
|
||
"channel_no="+payType,
|
||
"check_code="+ GetSha256(custom_no + payType + Amount + shaCode),
|
||
"custom_no="+ custom_no,
|
||
"dynamic_id="+dynamic_id,
|
||
"dynamic_id_type="+ "bar_code",
|
||
"format="+ "json",
|
||
"ksn="+ ksn,
|
||
"method="+ "linkea.pays.thirdpay.createAndPay",
|
||
"out_trade_no="+ out_trade_no,
|
||
"pays_enum="+ payType,
|
||
"product_code="+ "BARCODE_PAY_OFFLINE",
|
||
"subject="+ subject,
|
||
"timestamp="+ System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
||
"total_fee="+ Amount,
|
||
"v="+"1.1",
|
||
"work_key="+ work_key,
|
||
"sign_method=md5"
|
||
};
|
||
|
||
//进行排序;
|
||
string[] Sortedstr = BubbleSort(Oristr);
|
||
|
||
|
||
//构造待md5摘要字符串 ;
|
||
|
||
StringBuilder prestr = new StringBuilder();
|
||
|
||
for (i = 0; i < Sortedstr.Length; i++)
|
||
{
|
||
if (i == Sortedstr.Length - 1)
|
||
{
|
||
prestr.Append(Sortedstr[i]);
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
prestr.Append(Sortedstr[i] + "&");
|
||
}
|
||
|
||
}
|
||
|
||
//生成Md5摘要;
|
||
string jiami = app_secret + prestr.ToString().Replace("=", "").Replace("&", "") + app_secret;
|
||
string sign = GetMD5(jiami);
|
||
|
||
//构造支付Url;
|
||
char[] delimiterChars = { '=' };
|
||
StringBuilder parameter = new StringBuilder();
|
||
parameter.Append(postUrl + "?");
|
||
for (i = 0; i < Sortedstr.Length; i++)
|
||
{
|
||
|
||
parameter.Append(Sortedstr[i].Split(delimiterChars)[0] + "=" + HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1]) + "&");
|
||
}
|
||
|
||
parameter.Append("&sign=" + sign.ToUpper());
|
||
|
||
|
||
//返回支付Url;
|
||
return parameter.ToString();
|
||
}
|
||
#endregion
|
||
|
||
#region trade_query
|
||
public static string trade_query(string out_trade_no, string PAYTYPE)
|
||
{
|
||
string custom_no = "", shaCode = "", ksn = "", channel_no = "", paysEnum = "";
|
||
switch (PAYTYPE)
|
||
{
|
||
case "ALIPAY":
|
||
custom_no = "linkea-qianruan-alipay";
|
||
//校验码秘钥
|
||
shaCode = "9DACF5FBDCF7EE8D5CFFC32E80ADFF51";
|
||
//Ksn
|
||
ksn = "678804280000001";
|
||
//渠道号
|
||
channel_no = "ALIPAY";
|
||
//交易类型
|
||
paysEnum = "ALIPAY";
|
||
break;
|
||
case "WECHAT_PAY":
|
||
custom_no = "linkea-qianruan-wechat";
|
||
//校验码秘钥
|
||
shaCode = "3C9D77299B35012BC02BDAB8B1000C29";
|
||
//Ksn
|
||
ksn = "678804280000002";
|
||
//渠道号
|
||
channel_no = "WECHAT_PAY";
|
||
//交易类型
|
||
paysEnum = "WECHAT_PAY";
|
||
break;
|
||
}
|
||
string[] Oristr ={
|
||
"channel_no="+ PAYTYPE,
|
||
"app_key="+ app_key,
|
||
"check_code="+ GetSha256(custom_no + PAYTYPE + shaCode),
|
||
"custom_no="+custom_no,
|
||
"format="+ "json",
|
||
"work_key=" +work_key,
|
||
"ksn="+ksn,
|
||
"method="+ "linkea.pays.thirdpay.query",
|
||
"out_trade_no="+out_trade_no,
|
||
"pays_enum="+PAYTYPE,
|
||
"timestamp="+ System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
||
"sign_method=md5",
|
||
"v="+"1.1"
|
||
};
|
||
|
||
//进行排序;
|
||
Oristr = BubbleSort(Oristr);
|
||
|
||
|
||
StringBuilder prestr = new StringBuilder();
|
||
for (int i = 0; i < Oristr.Length; i++)
|
||
{
|
||
if (i == Oristr.Length - 1)
|
||
{
|
||
prestr.Append(Oristr[i]);
|
||
}
|
||
else
|
||
{
|
||
prestr.Append(Oristr[i] + "&");
|
||
}
|
||
|
||
}
|
||
string jiami = app_secret + prestr.ToString().Replace("=", "").Replace("&", "") + app_secret;
|
||
string sign = GetMD5(jiami);
|
||
|
||
//构造
|
||
char[] delimiterChars = { '=' };
|
||
StringBuilder parameter = new StringBuilder();
|
||
parameter.Append(postUrl + "?");
|
||
for (int i = 0; i < Oristr.Length; i++)
|
||
{
|
||
|
||
parameter.Append(Oristr[i].Split(delimiterChars)[0] + "=" + HttpUtility.UrlEncode(Oristr[i].Split(delimiterChars)[1]) + "&");
|
||
}
|
||
|
||
parameter.Append("&sign=" + sign.ToUpper());
|
||
|
||
|
||
//返回支付Url;
|
||
return parameter.ToString();
|
||
}
|
||
#endregion
|
||
}
|
||
|
||
#region ResultObject_response
|
||
public class ResultObject_response
|
||
{
|
||
public string result_code
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string result_msg
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string sign
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region PayCreateObject
|
||
public class PayCreateObject
|
||
{
|
||
/// <summary>
|
||
/// 流水码
|
||
/// </summary>
|
||
public string trade_no
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 门店内码
|
||
/// </summary>
|
||
public string shopcode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 机器内码
|
||
/// </summary>
|
||
public string machinecode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 时间戳
|
||
/// </summary>
|
||
public string timestamp
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 金额
|
||
/// </summary>
|
||
public string amount
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 支付类型
|
||
/// </summary>
|
||
public string paymode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
public string custom_no
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
public string trade_desc
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
public string signcode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
}
|
||
#endregion
|
||
|
||
#region PayCreateResult
|
||
public class PayCreateResult
|
||
{
|
||
public string trade_no
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
//public string shopcode
|
||
//{
|
||
// get;
|
||
// set;
|
||
//}
|
||
|
||
//public string machinecode
|
||
//{
|
||
// get;
|
||
// set;
|
||
//}
|
||
|
||
//public string timestamp
|
||
//{
|
||
// get;
|
||
// set;
|
||
//}
|
||
public string trade_num
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
public string result_code
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
public string result_desc
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region PayQueryObject
|
||
public class PayQueryObject
|
||
{
|
||
public string trade_no
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string shopcode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string machinecode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string timestamp
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string paymode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string signcode
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region PayQueryResult
|
||
public class PayQueryResult
|
||
{
|
||
public string trade_no
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
public string trade_num
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string result_code
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public string result_desc
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
public List<string> result_data
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region JsonHelper
|
||
public class JsonHelper
|
||
{
|
||
|
||
/// <summary>
|
||
/// DataSet转换为Json
|
||
/// </summary>
|
||
/// <param name="dataSet">DataSet对象</param>
|
||
/// <returns>Json字符串</returns>
|
||
public static string DataSetToJson(DataSet dataSet)
|
||
{
|
||
string jsonString = "{";
|
||
foreach (DataTable table in dataSet.Tables)
|
||
{
|
||
jsonString += "\"" + table.TableName + "\":" + DataTableToJson(table, table.TableName) + ",";
|
||
}
|
||
jsonString = jsonString.TrimEnd(',');
|
||
return jsonString + "}";
|
||
}
|
||
|
||
public static string ArrayToJson(string[] strs)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
for (int i = 0; i < strs.Length; i++)
|
||
{
|
||
sb.AppendFormat("'{0}':'{1}',", i + 1, strs[i]);
|
||
}
|
||
if (sb.Length > 0)
|
||
{
|
||
return ("{" + sb.ToString().TrimEnd(new char[] { ',' }) + "}");
|
||
}
|
||
return "";
|
||
}
|
||
|
||
public static string ArrayToJson<T>(List<T> list, string propertyname)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
if (list.Count > 0)
|
||
{
|
||
sb.Append("[{\"");
|
||
sb.Append(propertyname);
|
||
sb.Append("\":[");
|
||
foreach (T t in list)
|
||
{
|
||
sb.Append("\"");
|
||
sb.Append(t.ToString());
|
||
sb.Append("\",");
|
||
}
|
||
return (sb.ToString().TrimEnd(new char[] { ',' }) + "]}]");
|
||
}
|
||
return "";
|
||
}
|
||
|
||
public static string DataRowToJson(DataRow dr)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("{");
|
||
foreach (DataColumn dc in dr.Table.Columns)
|
||
{
|
||
sb.Append("\"");
|
||
sb.Append(dc.ColumnName);
|
||
sb.Append("\":\"");
|
||
if (((dr[dc] != null) && (dr[dc] != DBNull.Value)) && (dr[dc].ToString() != ""))
|
||
{
|
||
sb.Append(dr[dc]);
|
||
}
|
||
else
|
||
{
|
||
sb.Append(" ");
|
||
}
|
||
sb.Append("\",");
|
||
}
|
||
sb = sb.Remove(0, sb.Length - 1);
|
||
sb.Append("},");
|
||
return sb.ToString();
|
||
}
|
||
|
||
public static string DataTableToJson(DataTable dt, string dtName)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("{\"");
|
||
sb.Append(dtName);
|
||
sb.Append("\":[");
|
||
if (DataTableHelper.IsExistRows(dt))
|
||
{
|
||
foreach (DataRow dr in dt.Rows)
|
||
{
|
||
sb.Append("{");
|
||
foreach (DataColumn dc in dr.Table.Columns)
|
||
{
|
||
sb.Append("\"");
|
||
sb.Append(dc.ColumnName);
|
||
sb.Append("\":\"");
|
||
if (((dr[dc] != null) && (dr[dc] != DBNull.Value)) && (dr[dc].ToString() != ""))
|
||
{
|
||
sb.Append(dr[dc].ToString().Replace("\\", "\\\\").Replace("\'", "\\\'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", "'"));
|
||
//sb.Append(dr[dc].ToString().Replace("\"", "'").Replace("'","“")).Replace(@"\", "/");
|
||
}
|
||
else
|
||
{
|
||
sb.Append(" ");
|
||
}
|
||
sb.Append("\",");
|
||
}
|
||
sb = sb.Remove(sb.Length - 1, 1);
|
||
sb.Append("},");
|
||
}
|
||
sb = sb.Remove(sb.Length - 1, 1);
|
||
}
|
||
sb.Append("]}");
|
||
return JsonCharFilter(sb.ToString());
|
||
}
|
||
|
||
private static List<string> GetObjectProperty(object o)
|
||
{
|
||
List<string> propertyslist = new List<string>();
|
||
PropertyInfo[] propertys = o.GetType().GetProperties();
|
||
foreach (PropertyInfo p in propertys)
|
||
{
|
||
propertyslist.Add(string.Concat(new object[] { "\"", p.Name.ToString(), "\":\"", p.GetValue(o, null), "\"" }));
|
||
}
|
||
return propertyslist;
|
||
}
|
||
|
||
public static string HashtableToJson(Hashtable data, string dtName)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("{\"");
|
||
sb.Append(dtName);
|
||
sb.Append("\":[{");
|
||
foreach (object key in data.Keys)
|
||
{
|
||
object value = data[key];
|
||
sb.Append("\"");
|
||
sb.Append(key);
|
||
sb.Append("\":\"");
|
||
if (!(string.IsNullOrEmpty(value.ToString()) || (value == DBNull.Value)))
|
||
{
|
||
sb.Append(value).Replace(@"\", "/");
|
||
}
|
||
else
|
||
{
|
||
sb.Append(" ");
|
||
}
|
||
sb.Append("\",");
|
||
}
|
||
sb = sb.Remove(sb.Length - 1, 1);
|
||
sb.Append("}]}");
|
||
return JsonCharFilter(sb.ToString());
|
||
}
|
||
|
||
public static string IListToJson<T>(IList<T> list, bool FlagBool = false)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("[");
|
||
foreach (T t in list)
|
||
{
|
||
sb.Append(ObjectToJson<T>(t, FlagBool) + ",");
|
||
}
|
||
return (sb.ToString().TrimEnd(new char[] { ',' }) + "]");
|
||
}
|
||
|
||
public static string IListToJson<T>(IList<T> list, string ClassName)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("{\"" + ClassName + "\":[");
|
||
foreach (T t in list)
|
||
{
|
||
sb.Append(ObjectToJson<T>(t) + ",");
|
||
}
|
||
return (sb.ToString().TrimEnd(new char[] { ',' }) + "]}");
|
||
}
|
||
|
||
private static string JsonCharFilter(string sourceStr)
|
||
{
|
||
return sourceStr;
|
||
}
|
||
|
||
|
||
public static string ListToJson<T>(List<T> objlist, string jsonName, bool ObjectName = true)
|
||
{
|
||
string result = string.Empty;
|
||
if (ObjectName)
|
||
{
|
||
result += "{";
|
||
if (jsonName.Equals(string.Empty))
|
||
{
|
||
object o = objlist[0];
|
||
jsonName = o.GetType().ToString();
|
||
result = result + "\"" + jsonName + "\":[";
|
||
}
|
||
else
|
||
{
|
||
result = result + "\"" + jsonName + "\":[";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
result = "[";
|
||
}
|
||
|
||
bool firstline = true;
|
||
foreach (object oo in objlist)
|
||
{
|
||
if (!firstline)
|
||
{
|
||
result = result + "," + ObjectToJson(oo);
|
||
}
|
||
else
|
||
{
|
||
result = result + ObjectToJson(oo);
|
||
firstline = false;
|
||
}
|
||
}
|
||
if (ObjectName)
|
||
{
|
||
return (result + "]}");
|
||
}
|
||
else
|
||
{
|
||
return (result + "]");
|
||
}
|
||
}
|
||
|
||
private static string ObjectToJson(object o)
|
||
{
|
||
string result = "{";
|
||
List<string> ls_propertys = new List<string>();
|
||
ls_propertys = GetObjectProperty(o);
|
||
foreach (string str_property in ls_propertys)
|
||
{
|
||
if (result.Equals("{"))
|
||
{
|
||
result = result + str_property;
|
||
}
|
||
else
|
||
{
|
||
result = result + "," + str_property;
|
||
}
|
||
}
|
||
return (result + "}");
|
||
}
|
||
|
||
public static string ObjectToJson<T>(T t, bool FlagBool = false)
|
||
{
|
||
FlagBool = false;
|
||
StringBuilder sb = new StringBuilder();
|
||
string json = "";
|
||
if (t == null)
|
||
{
|
||
return json;
|
||
}
|
||
sb.Append("{");
|
||
PropertyInfo[] properties = t.GetType().GetProperties();
|
||
foreach (PropertyInfo pi in properties)
|
||
{
|
||
sb.Append("\"" + pi.Name.ToString() + "\"");
|
||
sb.Append(":");
|
||
if (FlagBool == true && pi.PropertyType.ToString() == "System.Boolean")
|
||
{
|
||
sb.Append(pi.GetValue(t, null));
|
||
}
|
||
else
|
||
{
|
||
sb.Append("\"" + pi.GetValue(t, null) + "\"");
|
||
}
|
||
sb.Append(",");
|
||
}
|
||
return (sb.ToString().TrimEnd(new char[] { ',' }) + "}");
|
||
}
|
||
|
||
public static string ObjectToJson<T>(T t, string ClassName)
|
||
{
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("{\"" + ClassName + "\":[");
|
||
string json = "";
|
||
if (t == null)
|
||
{
|
||
return json;
|
||
}
|
||
sb.Append("{");
|
||
PropertyInfo[] properties = t.GetType().GetProperties();
|
||
foreach (PropertyInfo pi in properties)
|
||
{
|
||
sb.Append("\"" + pi.Name.ToString() + "\"");
|
||
sb.Append(":");
|
||
sb.Append("\"" + pi.GetValue(t, null) + "\"");
|
||
sb.Append(",");
|
||
}
|
||
return (sb.ToString().TrimEnd(new char[] { ',' }) + "}]}");
|
||
}
|
||
|
||
public static string ObjectToJson<T>(IList<T> IL, string jsonName)
|
||
{
|
||
StringBuilder Json = new StringBuilder();
|
||
Json.Append("{\"" + jsonName + "\":[");
|
||
if (IL.Count > 0)
|
||
{
|
||
for (int i = 0; i < IL.Count; i++)
|
||
{
|
||
PropertyInfo[] pis = Activator.CreateInstance<T>().GetType().GetProperties();
|
||
Json.Append("{");
|
||
for (int j = 0; j < pis.Length; j++)
|
||
{
|
||
Json.Append(string.Concat(new object[] { "\"", pis[j].Name.ToString(), "\":\"", pis[j].GetValue(IL[i], null), "\"" }));
|
||
if (j < (pis.Length - 1))
|
||
{
|
||
Json.Append(",");
|
||
}
|
||
}
|
||
Json.Append("}");
|
||
if (i < (IL.Count - 1))
|
||
{
|
||
Json.Append(",");
|
||
}
|
||
}
|
||
}
|
||
Json.Append("]}");
|
||
return Json.ToString();
|
||
}
|
||
|
||
/// <summary>
|
||
/// JSON格式数组转化为对应的List<T>
|
||
/// </summary>
|
||
/// <typeparam name="T"></typeparam>
|
||
/// <param name="JsonStr">JSON格式数组</param>
|
||
/// <returns></returns>
|
||
public static List<T> JSONStringToList<T>(string JsonStr)
|
||
{
|
||
JavaScriptSerializer Serializer = new JavaScriptSerializer();
|
||
//设置转化JSON格式时字段长度
|
||
List<T> objs = Serializer.Deserialize<List<T>>(JsonStr);
|
||
return objs;
|
||
}
|
||
|
||
|
||
public static Object Json2Obj(String json, Type t)
|
||
{
|
||
|
||
try
|
||
{
|
||
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t);
|
||
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
|
||
{
|
||
return serializer.ReadObject(ms);
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
return null;
|
||
}
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// Json 字符串 转换为 DataTable数据集合
|
||
/// </summary>
|
||
/// <param name="json"></param>
|
||
/// <returns></returns>
|
||
public static DataTable ToDataTable(string json)
|
||
{
|
||
DataTable dataTable = new DataTable(); //实例化
|
||
DataTable result;
|
||
try
|
||
{
|
||
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
|
||
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
|
||
ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
|
||
if (arrayList.Count > 0)
|
||
{
|
||
foreach (Dictionary<string, object> dictionary in arrayList)
|
||
{
|
||
if (dictionary.Keys.Count == 0)
|
||
{
|
||
result = dataTable;
|
||
return result;
|
||
}
|
||
//Columns
|
||
if (dataTable.Columns.Count == 0)
|
||
{
|
||
foreach (string current in dictionary.Keys)
|
||
{
|
||
dataTable.Columns.Add(current, dictionary[current].GetType());
|
||
}
|
||
}
|
||
//Rows
|
||
DataRow dataRow = dataTable.NewRow();
|
||
foreach (string current in dictionary.Keys)
|
||
{
|
||
dataRow[current] = dictionary[current];
|
||
}
|
||
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
|
||
}
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
result = dataTable;
|
||
return result;
|
||
}
|
||
/// <summary>
|
||
/// 将JSON解析成DataSet只限标准的JSON数据
|
||
/// 例如:Json={t1:[{name:'数据name',type:'数据type'}]}
|
||
/// 或 Json={t1:[{name:'数据name',type:'数据type'}],t2:[{id:'数据id',gx:'数据gx',val:'数据val'}]}
|
||
/// </summary>
|
||
/// <param name="Json">Json字符串</param>
|
||
/// <returns>DataSet</returns>
|
||
public static DataSet JsonToDataSet(string Json)
|
||
{
|
||
try
|
||
{
|
||
DataSet ds = new DataSet();
|
||
JavaScriptSerializer JSS = new JavaScriptSerializer();
|
||
object obj = JSS.DeserializeObject(Json);
|
||
Dictionary<string, object> datajson = (Dictionary<string, object>)obj;
|
||
foreach (var item in datajson)
|
||
{
|
||
DataTable dt = new DataTable(item.Key);
|
||
object[] rows = (object[])item.Value;
|
||
foreach (var row in rows)
|
||
{
|
||
Dictionary<string, object> val = (Dictionary<string, object>)row;
|
||
DataRow dr = dt.NewRow();
|
||
foreach (KeyValuePair<string, object> sss in val)
|
||
{
|
||
if (!dt.Columns.Contains(sss.Key))
|
||
{
|
||
dt.Columns.Add(sss.Key.ToString());
|
||
dr[sss.Key] = sss.Value;
|
||
}
|
||
else
|
||
dr[sss.Key] = sss.Value;
|
||
}
|
||
dt.Rows.Add(dr);
|
||
}
|
||
ds.Tables.Add(dt);
|
||
}
|
||
return ds;
|
||
}
|
||
catch
|
||
{
|
||
return null;
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
} |