zoukankan      html  css  js  c++  java
  • JSON序列化反序列化

      JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。 JSON采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程序之间传输。JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成。

    JSON与XML的比较
      
    ◆可读性
      JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解。
    ◆文件大小与传输
      XML允许使用方便的标签,所以文件尺寸是要比JSON大的。而且JSON源于Javascript,所以天生的主战场是Javascript与网络,在这里,JSON有着XML无法赶超的优势。
    JSON语法
    1. JSON 语法是 JavaScript 对象表示法语法的子集。
    数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null。
    数据由逗号分隔:
    花括号保存对象:对象可以包含各种数据,包括数组。
    方括号保存数组:数字可以包含对象。
    例如:

    {
    "employees": [
    {
    "firstName": "Bill",
    "lastName": "Gates"
    },
    {
    "firstName": "George",
    "lastName": "Bush"
    }
    ]
    }

    2. 如果JSON中含有转义字符,则需要转义。例如文件路径中需要使用"\"而不是""。例如:{ "file":"C:\a.txt"}。
    .NET操作JSON

    原始方式:自己按照JSON的语法格式,写代码直接操作JSON字符串。如非必要,应该很少人会走这条路,从头再来的。
    JSON文件读入到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。
    .NET操作JSON通常有以下几种方式:

    主要类
    命名空间
    限制
    内建LINQ支持
    DataContractJsonSerializer
     
    System.Runtime.Serialization.Json
     
    通用
     
    JavaScriptSerializer
     
    System.Web.Script.Serialization
     
    只能在Web环境使用
     
    JsonArray、JsonObject、JsonValue
     
     System.Json
     
    只能在Silverlight中使用
     
    JsonConvert
    、JArray、JObject、JValue、JProperty
     
    Newtonsoft.Json  
     
    通用
     
     
    代码事例:
      1 using Newtonsoft.Json;
      2 using System;
      3 using System.Collections.Generic;
      4 using System.IO;
      5 using System.Runtime.Serialization.Json;
      6 using System.Text;
      7 using System.Text.RegularExpressions;
      8 using System.Web.Script.Serialization;
      9 
     10 namespace ConsoleApplication
     11 {
     12     public class JsonUtility
     13     {
     14         #region DataContractJsonSerializer    System.Runtime.Serialization.Json
     15         public static string DataContractJsonSerializer(object obj)
     16         {
     17             DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
     18             using (MemoryStream stream = new MemoryStream())
     19             {
     20                 json.WriteObject(stream, obj);
     21                 return Encoding.UTF8.GetString(stream.ToArray());
     22             }
     23         }
     24 
     25         public static T DataContractJsonDeserialize<T>(string json)
     26         {
     27             T obj = Activator.CreateInstance<T>();
     28             using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
     29             {
     30                 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
     31                 return (T)serializer.ReadObject(ms);
     32             }
     33         } 
     34         #endregion
     35 
     36         #region JavaScriptSerializer    System.Web.Script.Serialization
     37         public static string JavaScriptSerializer(object obj)
     38         {
     39             JavaScriptSerializer json = new JavaScriptSerializer();
     40             var str = json.Serialize(obj);
     41             str = Regex.Replace(str, @"\/Date((d+))\/", match =>
     42             {
     43                 DateTime dt = new DateTime(1970, 1, 1);
     44                 dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));
     45                 dt = dt.ToLocalTime();
     46                 return dt.ToString("yyyy-MM-dd HH:mm:ss");
     47             });
     48             return str;
     49         }
     50 
     51         public static T JavaScriptDeserialize<T>(string json)
     52         {
     53             JavaScriptSerializer serializer = new JavaScriptSerializer();
     54             return serializer.Deserialize<T>(json);
     55         } 
     56         #endregion
     57 
     58         #region JsonConvert、JArray、JObject、JValue、JProperty    Newtonsoft.Json
     59         public static string SerializeObject(object obj)
     60         {
     61             var jsonSerializerSettings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd hh:mm:ss" };
     62             return JsonConvert.SerializeObject(obj, jsonSerializerSettings);
     63         }
     64 
     65         public static T DeserializeObject<T>(string json)
     66         {
     67             return JsonConvert.DeserializeObject<T>(json);
     68         }
     69 
     70         public static dynamic DeserializeObject(string json)
     71         {
     72             return JsonConvert.DeserializeObject(json);
     73         } 
     74         #endregion
     75 
     76         public class Product
     77         {
     78             public string Name { get; set; }
     79 
     80             public double Price { get; set; }
     81 
     82             public DateTime DateTime { get; set; }
     83         }
     84 
     85         static void Main(string[] args)
     86         {
     87             var list = new List<Product>
     88             { 
     89                 new Product { Name = "苹果", Price = 4141 , DateTime = DateTime.Now },
     90                 new Product { Name = "荔枝", Price = 3544 , DateTime = DateTime.Now }
     91             };
     92             var str = DataContractJsonSerializer(list);
     93             var products = DataContractJsonDeserialize<List<Product>>(str);
     94 
     95             var str1 = JavaScriptSerializer(list);
     96             var products1 = JavaScriptDeserialize<List<Product>>(str1);
     97 
     98             var str2 = SerializeObject(list);
     99             var products2 = DeserializeObject<List<Product>>(str1);
    100             var products3 = DeserializeObject(str1);
    101         }
    102     }
    103 }
    JsonArray的方式实现 戳这里


     
  • 相关阅读:
    fir.im Weekly
    【转】UITextView的使用详解
    UITextView textViewShouldEndEditing
    【转】 iOS 两种方法实现左右滑动出现侧边菜单栏 slide view
    【转】 UITableView 的indexPath
    【转】 iOS Provisioning Profile(Certificate)与Code Signing详解
    【原】AVAudio录制,播放 (解决真机播放音量太小)
    iOS开发知识点:理解assign,copy,retain变strong
    【转】 NSArray copy 问题
    UITableView中的visibleCells的用法(visibleCells帮上大忙了)
  • 原文地址:https://www.cnblogs.com/liuxiaoji/p/4775914.html
Copyright © 2011-2022 走看看