zoukankan      html  css  js  c++  java
  • Open-source Tutorial

    JSON 简介

    JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。

    JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。XML利用标记语言的特性提供了绝佳的延展性(如XPath),在数据存储,扩展及高级检索方面具备对JSON的优势,而JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。

    Why JSON.NET?

    我们都知道 .NET 自带用于将对象序列化成 JSON 的类(DataConstractJsonSerializer 和 JavaScriptSerializer),但是 JSON.NET 给我们带来更多的功能和强大的性能。具体可以查看官网介绍。

    如何使用?

    假如我们有这样一个对象

    public class Movie
    {
        public string Name { get; set; }
        public int Year { get; set; }
    }
    

    将对象序列化为 JSON

    Movie movie = new Movie
    {
        Name = "Bad Boys",
        Year = 1995
    };
    string json = JsonConvert.SerializeObject(movie, Formatting.Indented);
    

    将 JSON 反序列化为对象

    string json = @"{
      'Name': 'Bad Boys',
      'Year': 1995
    }";
    Movie movie = JsonConvert.DeserializeObject<Movie>(json);
    

    将 JSON 序列化为文件

    Movie movie = new Movie
    {
        Name = "Bad Boys",
        Year = 1995
    };
    
    // 方法一
    // serialize JSON to a string and then write string to a file
    File.WriteAllText(@"c:movie.json", JsonConvert.SerializeObject(movie));
    
    // 方法二
    // serialize JSON directly to a file
    using (StreamWriter file = File.CreateText(@"c:movie.json"))
    {
        JsonSerializer serializer = new JsonSerializer();
        serializer.Serialize(file, movie);
    }
    

    从文件中获取 JSON

    // 方法一
    // read file into a string and deserialize JSON to a type
    Movie movie1 = JsonConvert.DeserializeObject<Movie>(File.ReadAllText(@"c:movie.json"));
    
    // 方法二
    // deserialize JSON directly from a file
    using (StreamReader file = File.OpenText(@"c:movie.json"))
    {
        JsonSerializer serializer = new JsonSerializer();
        Movie movie2 = (Movie)serializer.Deserialize(file, typeof(Movie));
    }
    

    枚举类型序列化成字符串,而不是整形

    默认情况下,Newtonsoft.Json 在序列化和反序列化枚举类型时,使用的是整数。然而,当你想公开 JSON 文件时,整数不易于理解。那么,如何能使用字符串来序列化和反序列化 JSON 对象中的枚举类型呢?

    只需要将 [JsonConverter(typeof(StringEnumConverter), true)] 标记在枚举类型的对象属性上即可,如:

    public enum ZColor
    {
        Blue,
        Green,
        Red
    }
    
    [JsonConverter(typeof(StringEnumConverter), true)]
    public ZColor CurrentColor { get; set; }
    
  • 相关阅读:
    绿茶一杯辨蜂蜜
    将Windows桌面扩展到第二个显示器/投影机上
    各种茶的特点和挑选(未完)
    转载一位操盘手的惊人语录 
    大家看看这个资料,有助于你了解股市
    庄家的故事之000503海虹控股
    股本变迁,分红扩股数据调查
    onchange 和 onkeyup,onpropertychange 用法小记
    对范美忠事件的评论
    一位天涯的朋友在星期一晚上发来的留言
  • 原文地址:https://www.cnblogs.com/zdfffg/p/10300082.html
Copyright © 2011-2022 走看看