zoukankan      html  css  js  c++  java
  • C# JSON格式数据高级用法

     JSON简介

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

    JSON与XML的比较

    ◆可读性

    JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解。

    ◆文件大小与传输

    XML允许使用方便的标签,所以文件尺寸是要比JSON大的。而且JSON源于Javascript,所以天生的主战场是Javascript与网络,在这里,JSON有着XML无法赶超的优势。

    JSON语法

    1. JSON 语法是 JavaScript 对象表示法语法的子集。

    数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null。

    数据由逗号分隔:

    花括号保存对象:对象可以包含各种数据,包括数组。

    方括号保存数组:数字可以包含对象。

    在做开发的时候,很多数据都是以Json格式传输的,而使用Json的时候,我们通常会涉及到几个序列化对象的使用:

    System.Runtime.Serialization.Json.DataContractJsonSerializer
    System.Web.Script.Serialization.JavaScriptSerializer
    Json.NET即Newtonsoft.Json
    由于Json.NET的性能及通用性较好,因此它的使用范围越来越广,借助前人的经验今天我也总结使用一下。
    官网API:http://www.newtonsoft.com/json/help/html/N_Newtonsoft_Json.htm

    开源的类库Newtonsoft.Json(下载地址https://www.newtonsoft.com/json)

    基本用法

    Json.Net是支持序列化和反序列化DataTable、DataSet、Entity Framework和Entity的

    private void Newtonsoft()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Name", Type.GetType("System.String"));
        dt.Columns.Add("Sex", Type.GetType("System.String"));
        dt.Columns.Add("Age", Type.GetType("System.Int32"));
        dt.Columns.Add("PhoneNumber", Type.GetType("System.String"));
        for (int i = 0; i < 3; i++)
        {
            DataRow dr = dt.NewRow();
            dr["Name"] = "Name" + i;
            dr["Sex"] = i % 2 == 0 ? "" : "";
            dr["Age"] = 18 + i;
            dr["PhoneNumber"] = "18233388888";
            dt.Rows.Add(dr);
        }
        /*序列化DataTable*/
        string json = JsonConvert.SerializeObject(dt);
        /*反序列化DataTable*/
        DataTable dtSource = JsonConvert.DeserializeObject<DataTable>(json);
        foreach (DataRow item in dtSource.Rows)
        {
            string name = item["Name"].ToString();
            string sex = item["Sex"].ToString();
            int age = int.Parse(item["Age"].ToString());
            string phoneNumber = item["PhoneNumber"].ToString();
        }
    }

    Serialize JSON 格式转换

    Product product = new Product();
    product.Name = "Apple";
    product.Expiry = new DateTime(2008, 12, 28);
    product.Sizes = new string[] { "Small" };
    
    string json = JsonConvert.SerializeObject(product);
    // {
    //   "Name": "Apple",
    //   "Expiry": "2008-12-28T00:00:00",
    //   "Sizes": [
    //     "Small"
    //   ]
    // }

    Deserialize JSON 格式转换

    string json = @"{
      'Name': 'Bad Boys',
      'ReleaseDate': '1995-4-7T00:00:00',
      'Genres': [
        'Action',
        'Comedy'
      ]
    }";
    
    Movie m = JsonConvert.DeserializeObject<Movie>(json);
    
    string name = m.Name;
    // Bad Boys

    LINQ to JSON 格式转换

    JArray array = new JArray();
    array.Add("Manual text");
    array.Add(new DateTime(2000, 5, 23));
    
    JObject o = new JObject();
    o["MyArray"] = array;
    
    string json = o.ToString();
    // {
    //   "MyArray": [
    //     "Manual text",
    //     "2000-05-23T00:00:00"
    //   ]
    // }
  • 相关阅读:
    1.20 测试嵌套对象使用Object.defineProperty是否有效?
    1.6 对象解构赋值机制
    12.26 sessionStorage与locaStorage的区别(作用域、生命周期)
    break,continue,return 区别
    过滤关键词
    ES6 笔记
    Cesium 学习笔记
    Cesium 学习笔记
    【vue】清理代码
    《CSS世界》读书笔记(十六)
  • 原文地址:https://www.cnblogs.com/im17me/p/9984262.html
Copyright © 2011-2022 走看看