关于JSON格式字符串在C#中的使用

2022-10-13 11:46:24

如下是官网上的一段话,有助于理解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字符串。如果喜欢上面的代码,请给我点赞!关注我的文章!如果需要源码请留言联系我!

  • 作者:flysh05
  • 原文链接:https://blog.csdn.net/flysh05/article/details/120895990
    更新时间:2022-10-13 11:46:24