如下是官网上的一段话,有助于理解JSON。
JSON
https://www.json.org/json-en.html
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。人类很容易阅读和写作。机器很容易解析和生成。它基于JavaScript 编程语言标准ECMA-262 第 3 版 - 1999 年 12 月的一个子集。JSON 是一种完全独立于语言的文本格式,但使用 C 系列语言的程序员熟悉的约定,包括 C、 C++、C#、Java、JavaScript、Perl、Python 等等。这些特性使 JSON 成为一种理想的数据交换语言。
JSON 建立在两种结构上:
名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。
值的有序列表。在大多数语言中,这被实现为数组、向量、列表或序列。
这些是通用数据结构。几乎所有现代编程语言都以一种或另一种形式支持它们。可与编程语言互换的数据格式也基于这些结构是有道理的。
在 JSON 中,它们采用以下形式:
对象是一组无序名称/值对。对象以{左大括号开始,以}右大括号结束。每个名称后跟:冒号,名称/值对由,逗号分隔。
方式1:安装第三方组件Newtonsoft.Json
后台代码添加引用:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
测试实例1:
创建一个简单的JSON字符串 ,如 {“Name”:“Jack”,“Age”:26,“Sex”:“Male”}
StringWriter sw = new StringWriter();
JsonWriter jw = new JsonTextWriter(sw);
jw.WriteStartObject();
jw.WritePropertyName(“Name”);
jw.WriteValue(“Jack”);
jw.WritePropertyName(“Age”);
jw.WriteValue(26);
jw.WritePropertyName(“Sex”);
jw.WriteValue(“Male”);
jw.WriteEndObject();
jw.Flush();
var jsonText = sw.GetStringBuilder().ToString();
Console.WriteLine(jsonText);
输出预期的字符串:
{“Name”:“Jack”,“Age”:26,“Sex”:“Male”}
测试实例2:
将对象转换为JSON字符串
首先创建对象模型:
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string PhoneNumber { get; set; }
}
Student类就是一个数据模型,创建模型的实力化对象,在转换为JSON字符串。
Student stu = new Student() { Name = “Jack”, Age = 20, PhoneNumber = “1388888888” };
// 实例化为一个Student类的对象,序列化为JSON字符串
JsonSerializer serializer = new JsonSerializer();
var sw = new StringWriter();
serializer.Serialize(new JsonTextWriter(sw), stu);
Console.WriteLine(sw.GetStringBuilder().ToString());
//{“Name”:“Jack”,“Age”:20,“PhoneNumber”:“1388888888”}
//反序列化,将JSON字符串转换为对象
StringReader sr = new StringReader(sw.GetStringBuilder().ToString());
Student s = (Student)serializer.Deserialize(new JsonTextReader(sr), typeof(Student));
Console.WriteLine(s.Name + “=>” + s.Age);
主要利用到2个方法Serialize( )方法 序列化,Deserialize()方法反序列化。
测试实例3:
创建实例对象的集合序列化
List students = new List();
Student stu = new Student() { Name = “Jack”, Age = 20, PhoneNumber = “1999999” };
Student stu1 = new Student() { Name = “Tom”, Age = 21, PhoneNumber = “888999” };
students.Add(stu);
students.Add(stu1);
JsonSerializer serializer = new JsonSerializer();
var sw = new StringWriter();
serializer.Serialize(new JsonTextWriter(sw), students);
Console.WriteLine(sw.GetStringBuilder().ToString());
输出:
[{“Name”:“Jack”,“Age”:20,“PhoneNumber”:“1999999”},{“Name”:“Tom”,“Age”:21,“PhoneNumber”:“888999”}]
测试实例4:
修改对象模型
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public List Phones { get; set; }
}
数据模型中电话是一个字符串列表,表示不止一个电话号码
测试代码:
List students = new List();
Student stu = new Student() { Name = “Jack”, Age = 20, Phones = new List { “1455655888”, “15236988985” } };
Student stu1 = new Student() { Name = “Tom”, Age = 21, Phones = new List { “1325889684”, “15236988985” } };
students.Add(stu);
students.Add(stu1);
JsonSerializer serializer = new JsonSerializer();
var sw = new StringWriter();
serializer.Serialize(new JsonTextWriter(sw), students);
Console.WriteLine(sw.GetStringBuilder().ToString());
输出:
[{“Name”:“Jack”,“Age”:20,“Phones”:[“1455655888”,“15236988985”]},{“Name”:“Tom”,“Age”:21,“Phones”:[“1325889684”,“15236988985”]}]
上述4中方法讲述了如果创建一个JOSN字符,如果将对象序列化为JSON字符串,都经过测试输出正常的。可以在实际需要中稍作修使用,下一张讲述如果读取JSON字符串。如果喜欢上面的代码,请给我点赞!关注我的文章!如果需要源码请留言联系我!