【LitJson官网】【Github】

下载: https://pan.baidu.com/s/1YqdMXYdvQxfPwaz1-tdYBg 提取码: 683y


目录

将JSON映射到对象,反之亦然

简单的JsonMapper示例

使用JsonMapper.ToObject的非泛型变体

Readers & Writers

使用JsonReader

使用JsonWriter

配置库的行为

JsonReader的配置

JsonWriter的配置


将JSON映射到对象,反之亦然

为了在.Net程序中使用JSON格式的数据,想到的自然方法是使用JSON文本填充特定类的新实例。可以是自定义的(构建为与输入JSON文本的结构匹配),也可以是更通用的自定义字典(充当字典)。

相反,为了建立从存储中的对象,一个简单的数据新的JSON字符串出口操作听起来是个好主意。

为此,LitJSON包括JsonMapper类,该类提供了两种用于执行JSON到对象和对象到JSON转换的方法。这些方法是JsonMapper.ToObject和 JsonMapper.ToJson

简单的JsonMapper示例

using LitJson;
using System;public class Person
{// C# 3.0 auto-implemented propertiespublic string   Name     { get; set; }public int      Age      { get; set; }public DateTime Birthday { get; set; }
}public class JsonSample
{public static void Main(){PersonToJson();JsonToPerson();}public static void PersonToJson(){Person bill = new Person();bill.Name = "William Shakespeare";bill.Age  = 51;bill.Birthday = new DateTime(1564, 4, 26);string json_bill = JsonMapper.ToJson(bill);Console.WriteLine(json_bill);}public static void JsonToPerson(){string json = @"{""Name""     : ""Thomas More"",""Age""      : 57,""Birthday"" : ""02/07/1478 00:00:00""}";Person thomas = JsonMapper.ToObject<Person>(json);Console.WriteLine("Thomas' age: {0}", thomas.Age);}
}

输出:

{"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}
Thomas' age: 57

使用JsonMapper.ToObject的非泛型变体

当要读取JSON数据且与特定数据结构匹配的自定义类不可用或不需要时,用户可以使用的非泛型变体ToObject,该变体返回JsonData实例。 JsonData是一种通用类型,可以保存JSON支持的任何数据类型,包括列表和字典。

using LitJson;
using System;public class JsonSample
{public static void Main(){string json = @"{""album"" : {""name""   : ""The Dark Side of the Moon"",""artist"" : ""Pink Floyd"",""year""   : 1973,""tracks"" : [""Speak To Me"",""Breathe"",""On The Run""]}}";LoadAlbumData(json);}public static void LoadAlbumData(string json_text){Console.WriteLine("Reading data from the following JSON string: {0}",json_text);JsonData data = JsonMapper.ToObject(json_text);// Dictionaries are accessed like a hash-tableConsole.WriteLine("Album's name: {0}", data["album"]["name"]);// Scalar elements stored in a JsonData instance can be cast to// their natural typesstring artist = (string) data["album"]["artist"];int    year   = (int) data["album"]["year"];Console.WriteLine("Recorded by {0} in {1}", artist, year);// Arrays are accessed like regular lists as wellConsole.WriteLine("First track: {0}", data["album"]["tracks"][0]);}
}

输出:

Reading data from the following JSON string:{"album" : {"name"   : "The Dark Side of the Moon","artist" : "Pink Floyd","year"   : 1973,"tracks" : ["Speak To Me","Breathe","On The Run"]}}Album's name: The Dark Side of the Moon
Recorded by Pink Floyd in 1973
First track: Speak To Me

Readers & Writers

一些开发人员可能熟悉的用于处理JSON数据的替代接口是通过类,该类使以类似于流的方式读取和写入数据成为可能。这些类是JsonReaderJsonWriter

实际上,这两种类型是该库的基础,并且该JsonMapper类型是在它们的基础上构建的,因此,从某种意义上说,开发人员可以将reader和writer类视为的低级编程接口LitJSON

使用JsonReader

using LitJson;
using System;public class DataReader
{public static void Main(){string sample = @"{""name""  : ""Bill"",""age""   : 32,""awake"" : true,""n""     : 1994.0226,""note""  : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]}";PrintJson(sample);}public static void PrintJson(string json){JsonReader reader = new JsonReader(json);Console.WriteLine ("{0,14} {1,10} {2,16}", "Token", "Value", "Type");Console.WriteLine (new String ('-', 42));// The Read() method returns false when there's nothing else to readwhile (reader.Read()) {string type = reader.Value != null ?reader.Value.GetType().ToString() : "";Console.WriteLine("{0,14} {1,10} {2,16}",reader.Token, reader.Value, type);}}
}

输出:

Token         Value             Type
------------------------------------------
ObjectStart
PropertyName  name              System.String
String        Bill              System.String
PropertyName  age               System.StringInt         32                System.Int32
PropertyName  awake             System.String
Boolean       True              System.Boolean
PropertyName  n                 System.String
Double        1994.0226         System.Double
PropertyName  note              System.String
ArrayStart
String        life              System.String
String        is                System.String
String        but               System.String
String        a                 System.String
String        dream             System.String
ArrayEnd
ObjectEnd 

使用JsonWriter

JsonWriter类是很简单的。请记住,如果您要将任意对象转换为JSON字符串,通常只需要使用 JsonMapper.ToJson 即可。

using LitJson;
using System;
using System.Text;public class DataWriter
{public static void Main(){StringBuilder sb = new StringBuilder();JsonWriter writer = new JsonWriter(sb);writer.WriteArrayStart();writer.Write(1);writer.Write(2);writer.Write(3);writer.WriteObjectStart();writer.WritePropertyName("color");writer.Write("blue");writer.WriteObjectEnd();writer.WriteArrayEnd();Console.WriteLine(sb.ToString());}
}

输出:

[1,2,3,{"color":"blue"}]

配置库的行为

JSON是一种非常简洁的数据交换格式。仅此而已。因此,在程序内部处理JSON格式的数据时,您可能需要就超出JSON规范范围的一些小细节进行慎重的决策。

例如,考虑从JSON字符串中读取数据,其中使用单引号分隔字符串,或者以Java风格的注释作为文档形式。这些东西不是JSON标准的一部分,但某些开发人员通常使用它们,因此您可能希望根据情况而宽容或严格。或者,如果您要将.Net对象转换为JSON字符串,但打印精美(使用缩进),该怎么办?

要声明所需的行为,可以从JsonReaderJsonWriter对象更改一些属性。

JsonReader的配置

using LitJson;
using System;public class JsonReaderConfigExample
{public static void Main(){string json;json = " /* these are some numbers */ [ 2, 3, 5, 7, 11 ] ";TestReadingArray(json);json = " [ \"hello\", 'world' ] ";TestReadingArray(json);}static void TestReadingArray(string json_array){JsonReader defaultReader, customReader;defaultReader = new JsonReader(json_array);customReader  = new JsonReader(json_array);customReader.AllowComments            = false;customReader.AllowSingleQuotedStrings = false;ReadArray(defaultReader);ReadArray(customReader);}static void ReadArray(JsonReader reader){Console.WriteLine("Reading an array");try {JsonData data = JsonMapper.ToObject(reader);foreach (JsonData elem in data)Console.Write("  {0}", elem);Console.WriteLine("  [end]");}catch (Exception e) {Console.WriteLine("  Exception caught: {0}", e.Message);}}
}

输出:

Reading an array2  3  5  7  11  [end]
Reading an arrayException caught: Invalid character '/' in input string
Reading an arrayhello  world  [end]
Reading an arrayException caught: Invalid character ''' in input string

JsonWriter的配置

using LitJson;
using System;public enum AnimalType
{Dog,Cat,Parrot
}public class Animal
{public string     Name { get; set; }public AnimalType Type { get; set; }public int        Age  { get; set; }public string[]   Toys { get; set; }
}public class JsonWriterConfigExample
{public static void Main(){var dog = new Animal {Name = "Noam Chompsky",Type = AnimalType.Dog,Age  = 3,Toys = new string[] { "rubber bone", "tennis ball" }};var cat = new Animal {Name = "Colonel Meow",Type = AnimalType.Cat,Age  = 5,Toys = new string[] { "cardboard box" }};TestWritingAnimal(dog);TestWritingAnimal(cat, 2);}static void TestWritingAnimal(Animal pet, int indentLevel = 0){Console.WriteLine("\nConverting {0}'s data into JSON..", pet.Name);JsonWriter writer1 = new JsonWriter(Console.Out);JsonWriter writer2 = new JsonWriter(Console.Out);writer2.PrettyPrint = true;if (indentLevel != 0)writer2.IndentValue = indentLevel;Console.WriteLine("Default JSON string:");JsonMapper.ToJson(pet, writer1);Console.Write("\nPretty-printed:");JsonMapper.ToJson(pet, writer2);Console.WriteLine("");}
}

输出:

Converting Noam Chompsky's data into JSON..
Default JSON string:
{"Name":"Noam Chompsky","Type":0,"Age":3,"Toys":["rubber bone","tennis ball"]}
Pretty-printed:
{"Name" : "Noam Chompsky","Type" : 0,"Age"  : 3,"Toys" : ["rubber bone","tennis ball"]
}Converting Colonel Meow's data into JSON..
Default JSON string:
{"Name":"Colonel Meow","Type":1,"Age":5,"Toys":["cardboard box"]}
Pretty-printed:
{"Name" : "Colonel Meow","Type" : 1,"Age"  : 5,"Toys" : ["cardboard box"]
}

LitJson官方示例(文档翻译)相关推荐

  1. 实现3d图片移动_ThingJS官方示例(三):3D标记Marker动效定制化

    物联网3D可视化场景中,经常用到标注元素作为线路标绘.业务区域标绘,比如定位物联网设备或危险源位置,进行安全作业或者路径导航规划,远程解决难题. ThingJS的3D标记"Marker&qu ...

  2. 【Android 插件化】DroidPlugin 编译运行 ( DroidPlugin 简介 | 编译 DroidPlugin 官方示例 | 运行 DroidPlugin 官方示例 )

    文章目录 一.DroidPlugin 简介 二.DroidPlugin 编译运行 1.编译 DroidPlugin 官方示例 2.运行 DroidPlugin 官方示例 一.DroidPlugin 简 ...

  3. 【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )

    文章目录 一.下载官方示例源码 二.处理 TINKER_ID 问题 三.编译 debug 包 四.安装 APK 并运行 五.修改 Gradle 构建脚本中的文件名称 六.修改程序逻辑代码 七.生成 p ...

  4. TiDB 官方设计文档翻译(三)

    这个系列共三篇译文:  TiDB 官方设计文档翻译(一)  TiDB 官方设计文档翻译(二)  TiDB 官方设计文档翻译(三) 原文:  https://pingcap.github.io/blog ...

  5. TiDB 官方设计文档翻译(二)

    这个系列共三篇译文:  TiDB 官方设计文档翻译(一)  TiDB 官方设计文档翻译(二)  TiDB 官方设计文档翻译(三) 原文:  https://pingcap.github.io/blog ...

  6. TiDB 官方设计文档翻译(一)

    TiDB是新兴的NEWSQL数据库,由国内的PINGCAP团队研发.  有关于TiDB的架构.部署和运维,官方有中文的文档,链接是:  https://github.com/pingcap/docs- ...

  7. Qt Dock Widgets 官方示例的翻译

    目录名字 Qt Dock Widgets 官方示例的翻译 Dock Widgets Example 介绍: MainWindow Class 定义: MainWindow Class 关联的相关头文件 ...

  8. AXI-IIC官方示例解析

    AXI-IIC官方示例解析 说明:本文是作者自己对Xilinx的AXI-IIC的官方示例的解析,如有错误望各位指正. 文章目录 AXI-IIC官方示例解析 前言 xiic_eeprom_example ...

  9. 微信小程序获取用户手机号--官方示例

    微信小程序获取用户手机号–官方示例 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNu ...

最新文章

  1. vb 实现小超市饮料补货提醒程序 public全局变量的声明与初始化
  2. vpn mysql_MYSQL数据库
  3. 在自定义HttpHandler中如何使用Session
  4. [MySQL高级](一) EXPLAIN用法和结果分析
  5. OpenVINO InferenceEngine 之Grap file
  6. unity技能框架_如何使用指导框架学习新技能
  7. 2021 ACDU China Tour-上海站暨数据库大咖讲坛(第4期)成功举办!(附视频回放PPT下载)...
  8. 鸿蒙系统上线 华为内部人员喷了,鸿蒙系统上线?华为人员表示:勿上当 山寨网站...
  9. Ubuntu: 搭建tftp,nfs服务器
  10. sql server一对多怎么查询_Vlookup函数查找最后一个值和一对多查询
  11. JavaScript:异步执行机制
  12. python实现 wifi密码 破解-密码字典篇【本篇文章仅供娱乐,请不要做非法用途】
  13. java爬取国家统计局之统计用区划和城乡划分代码(省市区三级)
  14. python自动化办公---工资说明excel生成word再转换成pdf
  15. 设置eMMC和DDR的工作频率
  16. sublime text3设置快捷键在浏览器中打开
  17. PV,V,UV的概念,采集数据
  18. “一刀切”严禁散煤,“煤改气”该如何走下去?
  19. Criteria查询用法
  20. Android学习笔记——APP页面转换与Intent学习

热门文章

  1. PI SXI_MONITOR查询的表
  2. 将职业和兴趣结合起来,于是“胖了么”诞生了!
  3. css网格_快活的Gridmas! 使用CSS网格构建喜庆的日历
  4. 以最美的名义 大连京东物流小哥登上2018央视新春舞台
  5. 第八十讲:实现气泡短信样式
  6. 快递单号查询,一键查询物流,分析多次揽件
  7. 在pycharm设置为Python环境
  8. 同样的失误不发生第二次---App5.0.6发版项目复盘
  9. Flutter:手机号输入分段
  10. 概率论知识点--上半学期