Json序列化之.NET开源类库Newtonsoft.Json的研究

JSON类库下载地址http://www.newtonsoft.com/json下载类库导入引用。

引用的命名空间:

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

本人百度文库:C#操作Word文档超详细TreeView无限开辟节点代码(FTP服务器中的文件和文件名为例)

Ø 深入研究之前先熟悉一下几个常用的类区

类名

说明

JObject

用于操作Json对象

方法

说明

三者共同点都是返回给JObject

JObject类可以用到操作json对象

JObject.Parse(string  json)

Json含有Json对象的字符串

JObject.FromObject(object  o)

转化对象

JObject.Load(JsonReader reader)

Reader包含着Json对象

 

JArray

用操作json数组

JValue

表示JSON(字符串,整数,日期等)中的值。

JProperty

表示JSON属性。

 

Ø Json的字符串搭建格式:

JSON数据在名称/值表达中:

1、名称使用字符串,双引号表示

2、值可以是数字

3、字符串双引号

4、数组方括号

5、对象花括号

 

Ø Json代码实战之(读取JsonReader 和 解析JObect)Json

Ø 使用JsonReader读取字符串

/// <summary>

        /// JsonReader顺序解析

        /// </summary>

        private void jsonOne()

        {

            string jsonText = @"{""Name"":""小三"",""Age"":""22""}";

            JsonReader reader = new JsonTextReader(new StringReader(jsonText));

 

            while (reader.Read())

            {

                Console.WriteLine(reader.TokenType);//名称类型

                Console.WriteLine(reader.ValueType);//输出类型

                Console.WriteLine(reader.Value);//输出值

                Console.WriteLine();

            }

        }

 

Ø JObject操作

关于JObect:

http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm

 

        /// <summary>

        /// JObject用于操作Json对象解析

        /// </summary>

        private void jsonTwo()

        {

            //第一种

            string jsonText = @"{""Name"":""小红"",""Age"":""22""}";

            JObject jo = JObject.Parse(jsonText);//加载json数据

            

            string[] values = jo.Properties().Select(e => e.Name.ToString() +":"+ e.Value.ToString()).ToArray<string>();//获取数据

            

            foreach(string s in values)

            {

                Console.WriteLine(s);

            }

 

            //第二种

            JsonReader jr = new JsonTextReader(new StringReader(@"{""你好"":""hihihihi""}"));

            JObject jo1 = JObject.Load(jr);//加载jsonReader读取的字符串进行操作

            Console.WriteLine(jo1);

 

            //第三种

            JArray array = new JArray();

            array.Add("hi 大家好");

            array.Add(new DateTime().Ticks);

 

            JObject o = new JObject();

            o["创投科技"] = array;

 

            Console.WriteLine(o.ToString());

 

            /*输出:

             * Name:小红

               Age:22

                {

                    "你好": "hihihihi"

                }

                {

                    "创投科技": ["hi 大家好",]

                }

             */

        }

Ø JArray数组操作   和  嵌套json

/// <summary>

        /// JArray数组类型

        /// </summary>

        private void jsonArray()

        {

            string JsonArrayText = @"[{""Name"":""小黑"",""Age"":""16""},{""Name"":""小白"",""Age"":""17""}]";

            //反序列化对象的JSON字符串。

            JArray ja = (JArray)JsonConvert.DeserializeObject(JsonArrayText);

 

            //指定某个行的名称数据

            string name1 = ja[1]["Name"].ToString();

            Console.WriteLine(name1);

 

            //遍历jsons数组

            for(int i=0;i<ja.Count;i++)

            {

                Console.WriteLine(ja[i].ToString());

            }

        }

 

 

/// <summary>

        /// Json嵌套性数据

        /// </summary>

        private void json()

        {

            try

            {

                string jsonText = @"

                                    {

                                        ""xxx"":

                                        {

                                            x1:

                                            {

                                                shantou:

                                                [{""zone"":""哈尔"",""zone_en"":""街道""}],

                                                xia:

                                                [{""Name"":""小红"",""Age"":""2999""}]

                                            }

                                        }

                                    }";

 

                JObject o = (JObject)JsonConvert.DeserializeObject(jsonText);

 

                //不加方括号json类型正常输出

                Console.WriteLine(o);//输出全部

 

                //以下输出只对数组有效

                Console.WriteLine(o["xxx"]["x1"]["shantou"][0]);//输出xxx类下的x1类的shantou类中的数据

                Console.WriteLine(o["xxx"]["x1"]["shantou"][0]["zone"]);//输出xxx类下的x1类的shantou类中的Name数组

            }

            catch (Exception ex) { Console.WriteLine(ex.ToString()); }

        }

Ø 序列化Json

v jsonWrite写入stringwriter并且输出

        /// <summary>

        /// JsonWrite

        /// </summary>

        private void jsonWriter()

        {

            StringWriter sw = new StringWriter();

 

            JsonWriter jw = new JsonTextWriter(sw);//json写入StringWriter

            jw.WritePropertyName("格式化爱情");

            jw.WriteValue("努力奋斗");

 

            Console.WriteLine(sw.ToString());

        }

v 反序列

构建json数据结构类,用Newtonsoft.Json.JsonConvert.DeserializeObject<Student>(jsonText);写入数据结构类

        /// <summary>

        /// Json数据架构类之操作之反序列化对象

        /// Newtonsoft.Json.JsonConvert.DeserializeObject

        /// </summary>

        private void jsonClass()

        {

            string jsonText = @"{

                            ""start"":

                             {   ""str1"":

                                {

                                    ""Name"":""小蔡"",

                                    ""Age"":""22222""

                                },

                                ""str2"":

                                {

                                     ""selfworth"":""自我提升"",

                                }

                             }

                    }";

 

            //反序列化公式

            Student json = Newtonsoft.Json.JsonConvert.DeserializeObject<Student>(jsonText);

            json.time = DateTime.Now;//给时间复制

            json.start.str1.Age = "26";//给年龄修改值

 

            Console.WriteLine("time == " + json.time);

            Console.WriteLine("str1 == " + json.start.str1.Name + "\t" + json.start.str1.Age);

            Console.WriteLine("str2 == " + json.start.str2.selfworth);

        }

数据结构类:

/// <summary>

    /// Json数据架构之入口

    /// </summary>

    public class Student

    {

        public DateTime time { get; set; }

        public sta start { get; set; }

    }

 

    /// <summary>

    /// Json分界接口

    /// </summary>

    public class sta

    {

        public stastr1 str1 { get; set; }

        public stastr2 str2 { get; set; }

    }

 

    /// <summary>

    /// Json输出用户信息

    /// </summary>

    public class stastr1

    {

        public string Name { get; set; }

        public string Age { get; set; }

    }

 

    /// <summary>

    /// Json输出用户价值

    /// </summary>

    public class stastr2

    {

        public string selfworth { get; set; }

}

v 序列化

构建json数据结构类,用JsonSerializer类;写入数据结构类

        /// <summary>

        /// Json数据架构类之操作之序列化

        /// JsonSerializer

        /// </summary>

        private void jsonClass2()

        {

            //方法一

            st s = new st() { Name = "程序员", Age = 20 };//添加数据

            //将对象序列化和反序列化为JSON格式。该JsonSerializer使您能够控制对象的编码成JSON

            JsonSerializer ser = new JsonSerializer();//JSON序列化

 

            StringWriter sw = new StringWriter();//写入字符初始化

            ser.Serialize(new JsonTextWriter(sw), s);//参数含义:第一个参数设置为写入的stringwriter,第二个参数设置为输出的数据结构类

            Console.WriteLine(sw.GetStringBuilder().ToString());

 

            Console.WriteLine("\n\n第二种实现方法List泛型");

 

            //方法二

            List<st> ls = new List<st>();

            st s1 = new st() { Name = "小K1", Age = 20, ls = new List<string> { "123", "456", "789" } };

            st s2 = new st() { Name = "小K2", Age = 22, ls = new List<string> { "101112", "131415", "161718" } };

            ls.Add(s1);

            ls.Add(s2);

 

            StringWriter sw1 = new StringWriter();

            JsonSerializer js = new JsonSerializer();

            js.Serialize(sw1, ls);

            Console.WriteLine(sw1.GetStringBuilder().ToString());

        }

数据结构类:

    /// <summary>

    /// Json数据结构

    /// </summary>

    public class st

    {

        public string Name { get; set; }

        public int Age { get; set; }

        public List<string> ls { get; set; }

    }

猜你喜欢

转载自blog.csdn.net/qq_23833037/article/details/76652345