zoukankan      html  css  js  c++  java
  • JSON In Code

    有关于定义,描述之类的文字官方都有解释:http://json.org/json-zh.html

    这次主题主要关于JSON的实际应用

     目录

    • JSON in Javascript
    • JSON in Asp.Net
    • LINQ to JSON
    • JSON Serialization
    • XML to JSON
    • Other Resources

      

    1.JSON in Javascript

    单列表

    <script>
           var User = {"UserID":01, "Name":"Rico", "Email":"rico◎hotmail.com"};
           alert(User.Name);
    </script>
    

    实际应用时,还可以把Name分为FirstName,LastName

    {"UserID":01, "Name":{"FirstName":"Rico","LastName":"Rui"}, "Email":"rico◎hotmail.com"}

    集合

    <script>
    
           var UserList = [
                           {"UserID":01, "Name":{"FirstName":"Rico","LastName":"Rui"}, "Email":"rico◎hotmail.com"},
                           {"UserID":02, "Name":{"FirstName":"XXX","LastName":"YYY"}, "Email":"xxx◎hotmail.com"},
                           {"UserID":03, "Name":{"FirstName":"ZZZ","LastName":"AAA"}, "Email":"YYY◎hotmail.com"} 
                          ]; 
    
          alert(UserList[0].Name.FirstName); 
    
    </script>
    

    2.JSON in Asp.Net

    Home.aspx:
    
    <script language="javascript" type="text/javascript">
           $(function() {
              $.getJSON("../WebForm1.aspx", 
                             { t: "json" }, 
                             function(o) { 
                                 alert(o.Name + "->" + o.Rating); 
                             }
                        );
             //以上写法也可以写成
             ///$.get("../WebForm1.aspx", {t:"json"}, function(o) { alert(o.Name + "->" + o.Rating); }, "json");  
           });
    </script>
    
    WebForm1.aspx.cs: (这里使用New Page方式,我们也可以使用httphandler方式(webForm1.ashx"))
    
    using System.Web.Script.Serialization;
    
    public partial class WebForm1 :System.Web.UI.Page {
            protected void Page_Load ( object sender , EventArgs e ) {
                JavaScriptSerializer jss = new JavaScriptSerializer ();
                JSONClass jsonClass = new JSONClass ();
                jsonClass.Name = "JSON";
                jsonClass.Value = 1;
                Response.ContentType = "text/plain";
                Response.Write ( jss.Serialize ( jsonClass ) );
                //必须收尾
                Response.End ();
            } 
    
            public class JSONClass {
                public string Name;
                public int Value;
            }
        }
    
    3.LINQ to JSON (support in his Json.NET library) 
    创建数据
        private class DataEntity
        {
          public string Title { get; set; }
          public string Description { get; set; }
          public IList<string> Categories { get; set; }
        } 
    
        private List<DataEntity> SetDatas()
        {
          return new List<DataEntity>()
          {
            new DataEntity()
            {
              Title = "Title One",
              Description = "Description One",
              Categories = new List<string>() { "Json.NET", "LINQ" }
            },
            new DataEntity()
            {
              Title = "Title Two",
              Description = "Description Two",
              Categories = new List<string>() { "Json.NET", "CodePlex" }
            }
          };
        }
        public JObject SetDataToJObject(){
    
                List<DataEntity> datas = SetDatas();
    
                JObject rss =
                  new JObject (new JProperty ( "channel" ,
                      new JObject (new JProperty ( "title" , "Test Title" ) ,
                                   new JProperty ( "description" , "Set Data Using JObject" ) ,
                                   new JProperty ( "item" ,
                          new JArray (
                            from p in datas 
                            orderby p.Title
                            select new JObject ( new JProperty ( "title" , p.Title ) ,
                                                 new JProperty ( "description" , p.Description ) ,
                                                 new JProperty ( "category" ,new JArray (
                                                                                         from c in p.Categories
                                                                                         select new JValue ( c ) )
                  )))))));
    
                   return rss.ToString ();
       }
    输出的结果
                //{
                //  "channel": {
                //    "title": "Test Title",
                //    "description": "Set Data Using JObject",
                //    "item": [
                //      {
                //        "title": "Title Two",
                //        "description": "Description Two",
                //        "category": [
                //          "Json.NET",
                //          "CodePlex"
                //        ]
                //      },
                //      {
                //        "title": "Title One",
                //        "description": "Description One",
                //        "category": [
                //          "Json.NET",
                //          "LINQ"
                //        ]
                //      }
                //    ]
                //  }
                //}
    查询数据
     public void SearchDataList() {
     
               var  dataList = SetDataToJObject();
                var titles =
                        from p in dataList["channel"]["item"]
                      select p.Value<string> ( "title" );
    
                foreach ( var item in titles ) {
                    Console.WriteLine ( item );
                }
    
                查询结果            
                 //Title One
    //Title Two
    var categories = from c in dataList["channel"]["item"].Children()["category"].Values<string> () group c by c into g orderby g.Count () descending select new { Category = g.Key , Count = g.Count () }; foreach ( var c in categories ) { Console.WriteLine ( c.Category + " - Count: " + c.Count ); }
                查询结果 
                    //Json.NET - Count: 2
                //LINQ - Count: 1
                //CodePlex - Count: 1
    }
    *linq to Json 实际上就是linq to object
     
    4.JSON Serialization 

    有关于序列化:

    .NET Framewok 3.5也提供了JSON对象序列化和反序列化的类,System.Runtime.Serialization.Json 命名空间下的 DataContractJsonSerializer 类。

    当然也可以使用JSon.Net中的Serializer

    以下代码 使用DataContractJsonSerializer 类

    定义实体

        [DataContract]
        public class DataEntity
        {
            [DataMember]
            public String name { get; set; }
            [DataMember]
            public Int32 value { get; set; }
        }

    *Json 是在 Windows Communication Foundation (WCF) 中创建的 ASP.NET AJAX 服务所使用的默认数据格式。

    所以定义实体会声明相关DataContract,DataMember的属性,

    通过将 DataContract 附加到类并将 DataMember 属性附加到要序列化的成员,为DataEntity定义数据协定。

     

    (反)序列化代码

             /// <summary>
            /// JSON序列化
             /// </summary>
            public string JSONSerializer(object item)
            {
    
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
    
                using (MemoryStream memoryStream = new MemoryStream())
                {
    
                    serializer.WriteObject(memoryStream, item);
    
                    StringBuilder sb = new StringBuilder();
    
                    sb.Append(Encoding.UTF8.GetString(memoryStream.ToArray()));
    
                    return sb.ToString();
    
                }
    
            }
    
            /// <summary>
            /// JSON 反序列化为对象
             /// </summary>
            public T JSONDeSerializer<T>(string jsonStr)
            {
    
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
    
                MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr));
    
                T jsonObj = serializer.ReadObject(memoryStream) as T;
    
                memoryStream.Close();
    
                return jsonObj;
    
            }
    

    序列化工作结束。以下演示如何

    使用(反)序列化的数据或对象

    获取数据 CODE—> Page

    Page:

    <script language="javascript" type="text/javascript">

               $(function() {
                    $.ajax({
                        url: "WebForm2.ashx",
                        type: 'GET',
                        data: {},
                        dataType: 'json',
                        timeout: 1000,
                        error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) },
                        success: function(result) {
    
                            alert(result.name + "->" + result.value);
                        }
                    });
                });
    </script> 
    CodeFile:
        public class WebForm2: IHttpHandler
        {
            public void ProcessRequest(HttpContext context) {
                DataEntity data = new DataEntity();
    
                data.name = "Name";
                data.value = 01;
                
                context.Response.Write(data.JSONSerializer());
            }
           
            public bool IsReusable {
                get
                {
                    return false;
                }
            }
       }
    

    返回结果

    {"name":"Name","value":01}

    设置数据 Page—>Code

    Page:

    <script src="json2.js" type="text/javascript"></script>

     

    <script language="javascript" type="text/javascript">

              $(function() {
    
                    var jsData = { name: "Name", value: 01 };
      
                    //应用Json2.js中的stringify方法生成JSon String
                    var jsonStr = JSON.stringify(jsData); 
    
                    $.ajax({
                        url: "WebForm3.ashx",
                        type: 'POST',
                        data: { postjson: jsonStr },
                        dataType: 'json',
                        timeout: 1000,
                        error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) },
                        success: function(result) {
    
                            alert(result.success);
                        }
    
                    });
              });
    </script> 
    CodeFile:
    
        public class webForm3: IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                string jsonStr = context.Request["postjson"];
    
                DataEntity dataEntity = jsonStr.JSONDeSerializer<DataEntity>();
    
                if (string.IsNullOrEmpty(dataEntity.name))
                {
                    context.Response.Write("{success:false}");
                }
                else
                {
                    context.Response.Write("{success:true}");
                }
            }
            public bool IsReusable {
                get
                {
                    return false;
                }
            }
       }
     
    5.XML to JSON 

    参考:xml2json

    image

    6.其他资源:

    1.Enum
    首先所有 enum 成员都是可序列化的,然后序列化Enum值时,一般只会生成数字 
    如:public enum Color {red, green, blue, yellow, pink}则序列化 yellow 将生成数字 3,而不是字符串“yellow”。
     
    2.Time、Date
    JSON 格式不直接支持日期和时间,为了解决问题微软也有处理方案,如下
     
    资源参考:
    微软ASP.NET AJAX中日期类型的JSON处理
    Json 的日期格式与.Net DateTime类型的转换

    json2.js 不能反序列化时间属性问题

    代码:

    Code File:
    
    public class Data {
    
        public string Name;
    
        public DateTime time;
    
    }
    
    public String getData() {
    
            Data pd = new Data ("Rico", DateTime.Now());
    
            return "(" + JavascriptSerializer.Serializer(pd) + ")";
    
    }
    
    Page:
    
    <script language="javascript" type="text/javascript"> 
           var pagedata = eval('<%= getData() %>');
    </script> 
    
    

    3.JsonCache

    Json客户端Cache提高Web性能

  • 相关阅读:
    史上最大型广告欺诈活动Methbot:黑客是如何每天赚到500万美元的
    Google研究人员宣布完成全球首例SHA-1哈希碰撞!
    “无文件”恶意软件的威力:悄无声息一夜之间从ATM机中窃取80万美元
    怎样才能写出高质量的伪原创,并且排名在前?
    新手站长如何快速学习实践SEO?
    .net core 开发注意事项
    写cookies注意事项
    .net core Ocelot 开源的API网关学习
    .net core与asp.net读取网站根目录文件的区别
    asp.net 中webapi读取参数对象和.net core的区别
  • 原文地址:https://www.cnblogs.com/RuiLei/p/1580370.html
Copyright © 2011-2022 走看看