zoukankan      html  css  js  c++  java
  • .net处理JSON简明教程

    Json.Net是.net中的一种流行的高性能的JSON框架。

    特点

    1. 灵活的JSON序列化转化.net对象为JSON字符串。和把JSON字符串转换为.net对象。
    2. 手动读写JSON的Linq to JSON
    3. 比.net内置的JSON序列化程序更高的性能和速度。
    4. 便于读写的JSON
    5. 从XML中读取或写入JSON
    6. 支持Silverlight和Windows phone.

      当你读写的JSON与.net类紧密关联时,JSON序列化程序是一个不错的选择。JSON序列化程序将自动读写相关类的JSON。

      如果你只对JSON里面的数据感兴趣、你没有与JSON相关联的.net类或者JSON数据与你的类没有任何关系,你需要从对象中手动读写数据。以上各种情况下,你可以使用LINQ To JSON. LINQ To JSON 允许你在.net中更容易的读取、写入、修改JSON数据。

      Download Json.NET from CodePlex or install using NuGet

      PM> Install-Package Newtonsoft.Json

      JSON.net下载地址列表

      http://json.codeplex.com/releases/view/74287

      提供JSON.NET 4.0 Release 3版本地址

      http://json.codeplex.com/releases/view/74287#DownloadId=287841

      更多JSON详细信息,请查看: http://james.newtonking.com/projects/json-net.aspx

      先构造一个简单的类employee

      Public class employee{
      
              Public string eid{get;set;}
      
              Public string ename{get;set;}
      
              Public string esex{get;set;}
      
              Public datetime birthday{get;set;}
      
      }
      

      JSON序列化与反序列化的方案

      1. 使用Json.Net 处理JSON序列化与反序列化
    序列化方法
    
    private string JsonSerialize(employee emp) {
    
    return Newtonsoft.Json.JsonConvert.SerializeObject(emp);
    
    }
    
    反序列化方法
    
    private employee JsonDeserialize(string json) {
    
    return (employee)(Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(employee)));
    
    }
    
    1. 使用JavaScriptSerializer进行序列化、反序列化
          序列化方法 
      
      private string JsonSerialize (employee emp) {
      
      return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(emp);
      
      }
      
      反序列化
      
      Private string JsonDeserialize (string json){
      
      return (employee)(new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize(json,typeof(employee)));
      
      }
      
    1. 通过类DataContractJsonSerializer对JSON序列化和反序列化

      序列化方法

    private string JsonSerialize (employee emp) {
    
            System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
    
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
            dcjs.WriteObject(ms, emp);
    
            string json = System.Text.Encoding.UTF8.GetString(ms.ToArray());
    
            ms.Close();
    
            return json;
    
             } 
    

    反序列化方法

    private employee JsonDeserialize (string json) {
    
         System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
    
        System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
    
    employee obj = (employee)(dcjs.ReadObject(ms));
    
    return obj;
    
            } 
    
    1. 通过Newtonsoft.Json.Linq.JObject获取JSON数据

           

    private void LinqJson(string json) {
    
    JObject obj = Newtonsoft.Json.Linq.JObject.Parse(json);
    
    //获取全部数据值
    
    foreach (JToken token in obj.Values()) {
    
    Response.Write(token.ToString());
    
    }
    
    //获取唯一值
    
    Response.Write(obj["eid"].ToString()+"<br />"); } 
    

     

    1. 5、LINQ to JSON Example
    string json = @"{
    
      ""Name"": ""Apple"",
    
      ""Expiry"": new Date(1230422400000),
    
      ""Price"": 3.99,
    
      ""Sizes"": [
    
        ""Small"",
    
        ""Medium"",
    
        ""Large""
    
      ]
    
    }";
    
    JObject o = JObject.Parse(json);
    
    string name = (string)o["Name"];
    
    // Apple
    
    JArray sizes = (JArray)o["Sizes"];
    
    string smallest = (string)sizes[0]; 
    

    JSON序列化和反序列化日期时间的处理

    JSON格式不直接支持日期和时间。DateTime值值显示为"/Date(700000+0500)/"形式的JSON字符串,其中第一个数字(在提 供的示例中为 700000)是 GMT 时区中自 1970 1 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括"+0500"的部分可选,它指示该时间属于Local 类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc

    使用DataContractJsonSerializer的序列化方式对日期格式进行处理,其他的()序列化方案的使用方式是相同的。设计思想是通过正则表达式匹配,替换JSON里面的日期数据为正常的日期格式。

    序列化方法

    private string JsonSerialize (employee emp) {
    
    System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
    
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
    dcjs.WriteObject(ms, emp);
    
    string json = System.Text.Encoding.UTF8.GetString(ms.ToArray());
    
    ms.Close();
    
    //替换JSON时间为字符串
    
    string p = @"\/Date((d+))\/";
    
    System.Text.RegularExpressions.MatchEvaluator me = new System.Text.RegularExpressions.MatchEvaluator(ConvertJsonDateToDataString);
    
    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(p);
    
    json = regex.Replace(json, me);
    
    return json;
    
    }
    
     
    
     
    
    private string ConvertJsonDateToDataString(System.Text.RegularExpressions.Match m) {
    
    string result = string.Empty;
    
    DateTime dt = new DateTime(1970,1,1);
    
    dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
    
    dt = dt.ToLocalTime();
    
    result = dt.ToString("yyyy-MM-dd HH:mm:ss");
    
    return result;
    
    } 
    

    反序列化方法

    private employee JsonDeserialize (string json)
    
    {
    
    string p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}";
    
    System.Text.RegularExpressions.MatchEvaluator me = new System.Text.RegularExpressions.MatchEvaluator(ConvertDateStringToJsonDate);
    
    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(p);
    
    json = reg.Replace(json, me);
    
     
    
    System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs=new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(employee));
    
    System.IO.MemoryStream ms=new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
    
    employee emp=(employee)dcjs.ReadObject(ms);
    
    return emp;
    
    }
    
     
    
    private string ConvertDateStringToJsonDate(System.Text.RegularExpressions.Match m)
    
    {
    
    string result = string.Empty;
    
    DateTime dt = DateTime.Parse(m.Groups[0].Value);
    
    dt = dt.ToUniversalTime();
    
    TimeSpan ts = dt - DateTime.Parse("1970-1-1");
    
    result = string.Format("\/Date({0}+0800)\/", ts.TotalMilliseconds);
    
    return result;
    
    }
    
     
    
  • 相关阅读:
    安装jupyter
    git 查看分支图
    Docker原生健康检查使用
    压力测试指标判定
    Docker限制日志
    docker link 过时不再用了?那容器互联、服务发现怎么办?(2017年文章,建议使用docker network自定义网络)
    Nginx配置TCP服务负载均衡
    【转让】看看有你喜欢的书籍嘛?--都是我翻过的。
    《SOD框架企业级应用数据架构实战》新书简介和预定
    一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源
  • 原文地址:https://www.cnblogs.com/xiaoquangege/p/3920005.html
Copyright © 2011-2022 走看看