zoukankan      html  css  js  c++  java
  • .NET下 JSON 的一些常用操作

    1.JSON的序列化和反序列化

    Newtonsoft.Json dll 下载地址http://json.codeplex.com/ 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace PlayJSON
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<StuInfo> list = new List<StuInfo>() { new StuInfo{StuName="张三",StuSex="男",StuAge=11},
                                                           new StuInfo{StuName="李四",StuSex="男",StuAge=32},
                                                           new StuInfo{StuName="王翠花",StuSex="女",StuAge=64}
                                                          };
                string jsonStr = JavaScriptConvert.SerializeObject(list);  //将对象转换成json存储
                Console.WriteLine("JSON字符串"+jsonStr);
                Console.ReadLine();
    
                List<StuInfo> newList = new List<StuInfo>();
    
               newList = (List<StuInfo>)JavaScriptConvert.DeserializeObject(jsonStr,typeof(List<StuInfo>));   //反序列化
    
                //StuInfo s = new StuInfo() { StuName = "阿龙", StuSex = "男", StuAge = 33 };
    
                //string sigleJSON = JavaScriptConvert.SerializeObject(s);
    
               //StuInfo newS = (StuInfo)JavaScriptConvert.DeserializeObject(sigleJSON);
               //Console.WriteLine("姓名:" + newS.StuName + "---性别:" + newS.StuSex + "--年龄:" + newS.StuAge + "
    
    ");
    
    
               foreach (StuInfo item in newList)
               {
                   Console.WriteLine("姓名:" + item.StuName + "---性别:" + item.StuSex + "--年龄:" + item.StuAge + "
    
    ");
               }
                Console.ReadLine();
            }
        }
        public class StuInfo 
        {
            public string StuName { set; get; }
            public string StuSex { set; get; }
            public int StuAge { set; get; }
        }
    }
    
    

      2.在web中

    /// <summary>
        /// Handler1 的摘要说明
        /// </summary>
        public class Handler1 : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "application/json";
    
                List<StuInfo> list = new List<StuInfo>() { new StuInfo{StuName="张三",StuSex="男",StuAge=11},
                                                           new StuInfo{StuName="李四",StuSex="男",StuAge=32},
                                                           new StuInfo{StuName="王翠花",StuSex="女",StuAge=64}
                                                          };
                string jsonStr = JavaScriptConvert.SerializeObject(list);
    
                context.Response.Write(jsonStr);
    
                context.Response.End();
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
        public class StuInfo
        {
            public string StuName { set; get; }
            public string StuSex { set; get; }
            public int StuAge { set; get; }
        }
    

      前台页面上的调用:这里采用jquery 的ajax请求

    <head runat="server">
        <title>JSON</title>
        <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
                $("#btnOK").click(function () {
                    $.ajax({
                        type: "JSON",
                        url: "Handler1.ashx",
                        data: null,
                        success: function (msg) {
                            var con="";
                            for (var i = 0; i < msg.length; i++) {
                                con += "姓名:" + msg[i].StuName + "--性别:" + msg[i].StuSex + "--" + "--年龄:" + msg[i].StuAge+"<br/>";
                            }
    
                            $("#divContent").html("长度:" + msg.length + "--具体内容:<br/>" + con);
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <input type="button" id="btnOK" value="点我获得JSON数据" />
        <div id="divContent"></div>
        </div>
        </form>
    </body>

    现在经常会用到json,因此经常会需要对其进行序列化和反序列化。,.NET Framewok 3.5也提供了JSON对象序列化和反序列化的类,这就是System.Runtime.Serialization.Json 命名空间下的 DataContractJsonSerializer 类。利用这个类,可以实现JSON对象的序列化和反序列化。

    现在我提供一个类JSON对象序列化和反序列化的类供参考用:

    /// <summary>
        /// JSON帮助类。用于将对象转换为Json格式的字符串,或者将Json的字符串转化为对象。
        /// </summary>
        public static class JsonHelper
        {
            /// <summary>
            /// 将对象转化为Json字符串 
            /// </summary>
            /// <typeparam name="T">源类型</typeparam>
            /// <param name="obj">源类型实例</param>
            /// <returns>Json字符串</returns>
            public static string GetJsonFromObj<T>(T obj)
            {
                DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
                using (MemoryStream ms = new MemoryStream())
                {
                    jsonSerializer.WriteObject(ms, obj);
                    return Encoding.UTF8.GetString(ms.ToArray());
                }
            }
    
            /// <summary>
            /// 将Json字符串转化为对象
            /// </summary>
            /// <typeparam name="T">目标类型</typeparam>
            /// <param name="strJson">Json字符串</param>
            /// <returns>目标类型的一个实例</returns>
            public static T GetObjFromJson<T>(string strJson)
            {
                T obj = Activator.CreateInstance<T>();
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)))
                {
                    DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
                    return (T)jsonSerializer.ReadObject(ms);
                }
            }
    
            /// <summary>
            /// 将DataTable转换为JSON字符串
            /// </summary>
            /// <param name="dt">数据表</param>
            /// <returns>JSON字符串</returns>
            public static string GetJsonFromDataTable(DataTable dt)
            {
                StringBuilder JsonString = new StringBuilder();
                if (dt != null && dt.Rows.Count > 0)
                {
                    JsonString.Append("{ ");
                    JsonString.Append(""TableInfo":[ ");
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        JsonString.Append("{ ");
                        for (int j = 0; j < dt.Columns.Count; j++)
                        {
                            if (j < dt.Columns.Count - 1)
                            {
                                JsonString.Append(""" + dt.Columns[j].ColumnName.ToString() + "":" + """ + dt.Rows[i][j].ToString() + "",");
                            }
                            else if (j == dt.Columns.Count - 1)
                            {
                                JsonString.Append(""" + dt.Columns[j].ColumnName.ToString() + "":" + """ + dt.Rows[i][j].ToString() + """);
                            }
                        }
                        if (i == dt.Rows.Count - 1)
                        {
                            JsonString.Append("} ");
                        }
                        else
                        {
                            JsonString.Append("}, ");
                        }
                    }
                    JsonString.Append("]}");
                    return JsonString.ToString();
                }
                else
                {
                    return null;
                }
            }
    
            /// <summary> 
            /// 将对象转化为Json字符串 
            /// </summary> 
            /// <param name="obj">源对象</param> 
            /// <returns>json数据</returns> 
            public static string ObjToJson(this object obj)
            {
                JavaScriptSerializer serialize = new JavaScriptSerializer();
                return serialize.Serialize(obj);
            }
    
            /// <summary> 
            /// 将Json字符串转化为对象
            /// </summary> 
            /// <param name="strJson">Json字符串</param> 
            /// <returns>目标对象</returns>
            public static T JsonToObj<T>(string strJson)
            {
                JavaScriptSerializer serialize = new JavaScriptSerializer();
                return serialize.Deserialize<T>(strJson);
            }
    
            /// <summary> 
            /// 将对象转化为Json字符串(控制深度 )
            /// </summary> 
            /// <param name="obj">源对象</param> 
            /// <param name="recursionDepth">深度</param> 
            /// <returns>json数据</returns> 
            public static string ObjToJson(this object obj, int recursionDepth)
            {
                JavaScriptSerializer serialize = new JavaScriptSerializer();
                serialize.RecursionLimit = recursionDepth;
                return serialize.Serialize(obj);
            }
    
            /// <summary> 
            /// 将Json字符串转化为对象(控制深度 )
            /// </summary> 
            /// <param name="strJson">Json字符串</param> 
            /// <param name="recursionDepth">深度</param> 
            /// <returns>目标对象</returns>
            public static T JsonToObj<T>(string strJson, int recursionDepth)
            {
                JavaScriptSerializer serialize = new JavaScriptSerializer();
                serialize.RecursionLimit = recursionDepth;
                return serialize.Deserialize<T>(strJson);
            }
    
            /// <summary> 
            /// 将DataTable转换为JSON字符串
            /// </summary> 
            /// <param name="dt">DataTable</param> 
            /// <returns>json数据</returns> 
            public static string DataTableToJson(DataTable dt)
            {
                Dictionary<string, object> dic = new Dictionary<string, object>();
    
                int index = 0;
                foreach (DataRow dr in dt.Rows)
                {
                    Dictionary<string, object> result = new Dictionary<string, object>();
    
                    foreach (DataColumn dc in dt.Columns)
                    {
                        result.Add(dc.ColumnName, dr[dc].ToString());
                    }
                    dic.Add(index.ToString(), result);
                    index++;
                }
                return ObjToJson(dic);
            }
        }
    

      使用如下:

    public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                //反序列化成对象     
                String strJson = "{"Name":"Test123","Url":"http://www.126.com/"}";
                Person p1 = JsonHelper.GetObjFromJson<Person>(strJson);
                Response.Write("<li>" + p1.Name + " " + p1.Url);
                Person p2 = JsonHelper.JsonToObj<Person>(strJson);
                Response.Write("<li>" + p2.Name + " " + p2.Url);
            }
    
            protected void Button2_Click(object sender, EventArgs e)
            {
                //对象的序列化 
                String JSONString = string.Empty;
                Person p1 = new Person();
                p1.Name = "Test123'"
    
    	";
                p1.Url = "http://www.126.com/";
                JSONString = JsonHelper.GetJsonFromObj<Person>(p1);
                Response.Write("<li>" + JSONString);
                JSONString = JsonHelper.ObjToJson(p1);
                Response.Write("<li>" + JSONString);
            }
        }
    
        /// <summary> 
        /// 类对象需要标记为DataContractAttribute 
        /// </summary> 
        [DataContractAttribute]
        class Person
        {
            //成员需要标记为 DataMember 
            [DataMember]
            public string Name { set; get; }
            [DataMember]
            public string Url { set; get; }
        }

    补充:

    在C#中可以对JSON进行序列化与反序列化,十分的方便。代码如下:

    首先引入命名空间:using System.Web.Script.Serialization;

    再定义一个类,如下:

    public class jsonClass
        {
            public string id;
            public string name;
            public string pId;
            public string isParent;
            public string open;
            public string senable;
            public string CHECKED;
            public string chkDisabled;
    
        }
    复制代码

    将一个JSON字符串转换成jsonClass类实例,如下:

    复制代码
    JavaScriptSerializer serializer = new JavaScriptSerializer();
                        List<jsonClass> jsonClassList = serializer.Deserialize<List<jsonClass>>(jsonString);
    复制代码

    将List<jsonClass>转换成json

    复制代码
    string resultString = serializer.Serialize(jsonClassList);
    复制代码



    转自:http://blog.csdn.net/hellojimmy520/article/details/7377265 

  • 相关阅读:
    Servant:基于Web的IIS管理工具
    mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
    使用 OWIN Self-Host ASP.NET Web API 2
    Xamarin和微软发起.NET基金会
    SQLite vs MySQL vs PostgreSQL:关系型数据库比较
    Mono 3.2.7发布,JIT和GC进一步改进
    如何使用Microsoft技术栈
    c#开源消息队列中间件EQueue 教程
    通过一组RESTful API暴露CQRS系统功能
    NEsper Nuget包
  • 原文地址:https://www.cnblogs.com/zhang9418hn/p/3255049.html
Copyright © 2011-2022 走看看