zoukankan      html  css  js  c++  java
  • c# 生成json数据包

    json数据类型,归根到底就是一个字符串,管他里面什么格式,它就是一个字符串来的!

    看一个json数据包:

    {
        "touser":"OPENID",
        "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
        "url":"http://weixin.qq.com/download",
        "topcolor":"#FF0000",
        "data":
            {
                "User": {
                "value":"黄先生",
                "color":"#173177"
                },
                "Date":{
                "value":"06月07日 19时24分",
                "color":"#173177"
                },
                "CardNumber":{
                "value":"0426",
                "color":"#173177"
                },
                "Type":{
                "value":"消费",
                "color":"#173177"
                },
                "Money":{
                "value":"人民币260.00元",
                "color":"#173177"
                },
                "DeadTime":{
                "value":"06月07日19时24分",
                "color":"#173177"
                },
                "Left":{
                "value":"6504.09",
                "color":"#173177"
                }
            }
    }

    你可以直接赋值一个string对象:

    string json = "{"touser":"OPENID",.......}";

    遇到双引号要使用转义“”进行转义。这样弄出来的一个string对象就是一个json数据包了。

    这样直接赋值麻烦,在网上找了找,为了生成上面这样的json,弄到了下面几个类:

    PayTemplateHeader.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;
    
    namespace tenpay
    {
        [DataContract] 
        public class PayTemplateHeader
        {
            public PayTemplateHeader() { }
    
            public PayTemplateHeader(string template_id, string touser, string url)
            {
                this.template_id = template_id;
                this.touser = touser;
                this.url = url;
            }
    
            /// <summary>
            /// 模板ID
            /// </summary>
            [DataMember]
            public string template_id { get; set; }
    
            /// <summary>
            /// 微信接收信息用户的openid
            /// </summary>
            [DataMember]
            public string touser { get; set; }
    
            /// <summary>
            /// 信息点击链接
            /// </summary>
            [DataMember]
            public string url { get; set; }
        }
    }

    PayTemplate.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;
    
    namespace tenpay
    {
        /// <summary>
        /// 微信充值模板接口请求实体对象
        /// </summary>
        [DataContract] 
        public class PayTemplate
        {
            public PayTemplate() { }
    
            /// <summary>
            /// 您好,您已成功进行某游戏币充值。
            /// </summary>
            [DataMember]
            public string first { get; set; }
    
            /// <summary>
            /// 帐号:kantzou
            /// </summary>
            [DataMember]
            public string accountType { get; set; }
    
            /// <summary>
            /// 帐号:kantzou
            /// </summary>
            [DataMember]
            public string account { get; set; }
    
            /// <summary>
            /// 获得游戏币:500点
            /// </summary>
            [DataMember]
            public string productType { get; set; }
    
            /// <summary>
            /// 获得游戏币:500点
            /// </summary>
            [DataMember]
            public string number { get; set; }
    
            /// <summary>
            /// 充值金额:50元
            /// </summary>
            [DataMember]
            public string amount { get; set; }
    
            /// <summary>
            /// 充值状态:充值成功
            /// </summary>
            [DataMember]
            public string result { get; set; }
    
            /// <summary>
            /// 祝您游戏愉快。
            /// </summary>
            [DataMember]
            public string remark { get; set; }
        }
    }

    JSONHelper.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    namespace tenpay
    {
        /// <summary>
        /// json转化类
        /// </summary>
        [Serializable]
        public class JSONHelper
        {
            public static string Serialize<T>(T obj)
            {
                System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
                MemoryStream ms = new MemoryStream();
                serializer.WriteObject(ms, obj);
                string retVal = Encoding.UTF8.GetString(ms.ToArray());
                ms.Dispose();
                return retVal;
            }
    
            public static T Deserialize<T>(string json)
            {
                T obj = Activator.CreateInstance<T>();
                MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
                System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
                obj = (T)serializer.ReadObject(ms);
                ms.Close();
                ms.Dispose();
                return obj;
            }
        }
    }
        public class DataFormat
        {
            public string value { get; set; }
            public string color { get; set; }
        }
    
        public class DataFormatList
        {
            public List<DataFormat> first { get; set; }
            public List<DataFormat> accountType { get; set; }
            public List<DataFormat> account { get; set; }
            public List<DataFormat> productType { get; set; }
            public List<DataFormat> number { get; set; }
            public List<DataFormat> amount { get; set; }
            public List<DataFormat> result { get; set; }
            public List<DataFormat> remark { get; set; }
        }  
            /// <summary>
            /// 微信充值模板接口json参数整理
            /// </summary>
            /// <param name="PayTemplate">微信充值模板接口参数实例</param>
            /// <returns></returns>
            public string getPayTemplateJson(PayTemplateHeader header, PayTemplate template,string color)
            {
                string jsonH = JSONHelper.Serialize<PayTemplateHeader>(header);
    
                DataFormatList dataformatlist = new DataFormatList();
    
                dataformatlist.first = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.first),color=color}};
    
                dataformatlist.accountType = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.accountType),color=color}};
    
                dataformatlist.account = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.account),color=color}};
    
                dataformatlist.productType = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.productType),color=color}};
    
                dataformatlist.number = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.number),color=color}};
    
                dataformatlist.amount = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.amount),color=color}};
    
                dataformatlist.result = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.result),color=color}};
    
                dataformatlist.remark = new List<DataFormat>(){  
                new DataFormat(){value=ConvertGBK(template.remark),color=color}};
    
                string jsonD = new JavaScriptSerializer().Serialize(dataformatlist);
    
                string json = jsonH.Insert(jsonH.Length - 1, ","data":" + jsonD.Replace("[", "").Replace("]", ""));
    
                return json;
            }
    
            private string ConvertGBK(string p)
            {
                byte[] byteArray = Encoding.UTF8.GetBytes(p);
                return Encoding.GetEncoding("GBK").GetString(byteArray);
            }

    调用例子:

            PayTemplateHeader header = new PayTemplateHeader();
            header.template_id = "jrciIIcHIYLJujC7FyqSiKyGGWnLok6VQJ1a81p1HLw";
            header.touser = "openid123";
            header.url = "http://www.baidu.com/App/Pay/1.aspx";
    
            PayTemplate paytemplate = new PayTemplate();
            paytemplate.first = "您好,您已成功进行某游戏币充值。";
            paytemplate.accountType = "账号";
            paytemplate.account = "k6780384";
            paytemplate.productType = "游戏币";
            paytemplate.number = "500点";
            paytemplate.amount = "50元";
            paytemplate.result = "充值成功";
            paytemplate.remark = "祝您游戏愉快";
            TenpayUtil tenpay = new TenpayUtil();
            string post_data = tenpay.getPayTemplateJson(header, paytemplate, "#173177");
            Response.Write(post_data);

    输出:

    哎,乱码了,不管了,只要微信那边不是乱码就好。

  • 相关阅读:
    计算机基础知识
    看 C++ Primer 的58页, 讲拷贝时不能忽略 底层const这里的说的原因有点牵强, 这里给出自己的理解
    GitHub
    让 typora和word一样好用
    推荐几款好用的文本编辑器,让您的办公更方便快捷。
    UML类图几种关系的总结
    poll, ppoll
    信号之sigaction函数
    posix多线程有感--自旋锁
    Linux IPC
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/4414736.html
Copyright © 2011-2022 走看看