作者: jingqia
查看: 2064|回复: 3

[求助] 求一个解析Json的类

[复制链接]
jingqia 发表于 2016-4-13 10:59:40 | 显示全部楼层 |阅读模式
查看: 2064|回复: 3
求一个解析Json的类
回复 论坛版权

使用道具 举报

乔克斯 发表于 2016-4-14 22:02:01 | 显示全部楼层
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace HLoliVideo.Comm
{
    public class JsonHelper
    {

        /// <summary>
        /// 转换对象为JSON格式数据
        /// </summary>
        /// <typeparam name="T">类</typeparam>
        /// <param name="obj">对象</param>
        /// <returns>字符格式的JSON数据</returns>
        public static string GetJSON<T>(object obj) {
            string result = String.Empty;
            try {
                System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
                new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
                using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) {
                    serializer.WriteObject(ms, obj);
                    result = System.Text.Encoding.UTF8.GetString(ms.ToArray());
                }
            } catch (Exception ex) {
                throw ex;
            }
            return result;
        }
        /// <summary>
        /// 转换List<T>的数据为JSON格式
        /// </summary>
        /// <typeparam name="T">类</typeparam>
        /// <param name="vals">列表值</param>
        /// <returns>JSON格式数据</returns>
        public static string JSON<T>(List<T> vals) {
            System.Text.StringBuilder st = new System.Text.StringBuilder();
            try {
                System.Runtime.Serialization.Json.DataContractJsonSerializer s = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));

                foreach (T city in vals) {
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) {
                        s.WriteObject(ms, city);
                        st.Append(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
                    }
                }
            } catch (Exception ex) {
                throw ex;
            }

            return st.ToString();
        }
        /// <summary>
        /// JSON格式字符转换为T类型的对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonStr"></param>
        /// <returns></returns>
        public static T ParseFormByJson<T>(string jsonStr) {
            T obj = Activator.CreateInstance<T>();
            using (System.IO.MemoryStream ms =
            new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonStr))) {
                System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
                new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
                return (T)serializer.ReadObject(ms);
            }
        }

        public static string JSON1<SendData>(List<SendData> vals) {
            System.Text.StringBuilder st = new System.Text.StringBuilder();
            try {
                System.Runtime.Serialization.Json.DataContractJsonSerializer s = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(SendData));

                foreach (SendData city in vals) {
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) {
                        s.WriteObject(ms, city);
                        st.Append(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
                    }
                }
            } catch (Exception ex) {
                throw ex;
            }

            return st.ToString();
        }

        public static string ToUnicodeString(string str) {
            StringBuilder strResult = new StringBuilder();
            if (!string.IsNullOrEmpty(str)) {
                for (int i = 0; i < str.Length; i++) {
                    strResult.Append("\\u");
                    strResult.Append(((int)str[i]).ToString("x"));
                }
            }
            return strResult.ToString();
        }

        public static string FromUnicodeString(string str) {
            //最直接的方法Regex.Unescape(str);
            StringBuilder strResult = new StringBuilder();
            if (!string.IsNullOrEmpty(str)) {
                string[] strlist = str.Replace("\\", "").Split('u');
                try {
                    for (int i = 1; i < strlist.Length; i++) {
                        long charCode = Convert.ToInt64(strlist[i].TrimStart('-'), 16);
                        strResult.Append((char)charCode);
                    }
                } catch (FormatException ex) {
                    return Regex.Unescape(str);
                }
            }
            return strResult.ToString();
        }
    }
}

 楼主| jingqia 发表于 2016-4-15 10:48:37 | 显示全部楼层
乔克斯 发表于 2016-4-14 22:02
[mw_shl_code=csharp,true]using System;
using System.Collections.Generic;
using System.Linq;

谢谢你 ;研究了下newtonsoft.json,还不错
BlueSky 发表于 2017-5-11 15:50:43 | 显示全部楼层
1,通过序列化将.net对象转换为JSON字符串

在web开发过程中,我们经常需要将从数据库中查询到的数据(一般为一个集合,列表或数组等)转换为JSON格式字符串传回客户端,这就需要进行序 列化,这里用到的是JsonConvert对象的SerializeObject方法。其语法格式 为:JsonConvert.SerializeObject(object),代码中的”object”就是要序列化的.net对象,序列化后返回的是 json字符串。
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-3-29 07:49, Processed in 0.587475 second(s), 29 queries , Gzip On.

快速回复 返回顶部 返回列表