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

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

你可能感兴趣的:(关于JSON格式字符串在C#中的使用)