1. 程式人生 > 實用技巧 >.net core - Json JObject JArray詳解

.net core - Json JObject JArray詳解

NuGet中新增最新穩定版:

Newtonsoft.Json

  

新建類:

using System;

namespace SystemClass.JsonStudy
{
    class Person
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public DateTime Birthday { get; set; }

        public bool IsVIP { get; set; }

        public float Account { get; set; }

        public string[] Favorites { get; set; }

        public string Remark { get; set; }

        public static Person GetPerson()
        {
            Person person = new Person
            {
                ID = 1,
                Name = "張三",
                Birthday = DateTime.Now,
                IsVIP = true,
                Account = 12.34f,
                Favorites = new string[] { "起床", "上班" }
            };
            return person;
        }
    }
}

  

使用:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

namespace SystemClass.JsonStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            //0 建立一個 Person 例項
            Person entity = Person.GetPerson();
            string jsonStr = string.Empty;

            //1 實體類的 Json 序列化和反序列化
            //  1.1 Json 序列化
            //      1.1.1返回不縮排的 Json 字串【見圖01】
            jsonStr = JsonConvert.SerializeObject(entity);
            //      1.1.2返回縮排的 Json 字串【見圖02】
            jsonStr = JsonConvert.SerializeObject(entity, Formatting.Indented);

            //  1.2 將不縮排的 JSON 字串轉成縮排形式【見圖03】
            jsonStr = JsonConvert.SerializeObject(entity);
            JObject jObject = JObject.Parse(jsonStr);
            jObject.ToString();

            //  1.3 其他設定【見圖04】
            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                DateFormatString = "yyyy-MM-dd HH:mm:ss",//設定日期格式
                NullValueHandling = NullValueHandling.Ignore,//忽略【null】值
                Formatting = Formatting.Indented//縮排
            };
            jsonStr = JsonConvert.SerializeObject(entity, settings);

            //  1.4 Json 反序列化【在不知道類的情況下,可以直接將json字串轉為JObject】
            var person = JsonConvert.DeserializeObject<Person>(jsonStr);


            //2 JObject 使用
            //  2.1 建立物件
            JObject obj = new JObject();
            obj.Add("ID", 1);
            obj.Add("Name", "張三");
            obj.Add("Birthday", DateTime.Parse("2000-01-02"));
            obj.Add("IsVIP", true);
            obj.Add("Account", 12.34f);
            //      建立陣列
            JArray array = new JArray();
            array.Add(new JValue("吃飯"));
            array.Add(new JValue("睡覺"));
            obj.Add("Favorites", array);
            obj.Add("Remark", null);
            //      2.1.1 遍歷 JObject 物件
            foreach (JProperty item in obj.Children())
            {
                Console.WriteLine("Name=" + item.Name + "-Value=" + item.Value);
            }

            //  2.2 JObject 中新增陣列
            //      上例中的程式碼可以簡化為:
            JArray array1 = new JArray("吃飯", "睡覺");

            //  2.3 從 Json 字串建立 JObject
            string json = "{\"ID\":1,\"Name\":\"張三\",\"Birthday\":\"2000-01-02T00:00:00\",\"IsVIP\":true,\"Account\":12.34,\"Favorites\":[\"吃飯\",\"睡覺\"],\"Remark\":null}";
            JObject obj1 = JObject.Parse(json);
            Console.WriteLine(obj1.ToString());
            Console.WriteLine(AddStr(json, "add", "add"));

            //  2.4 從 Entity 建立 JObject
            JObject obj2 = JObject.FromObject(entity);

            //  2.5 用匿名物件建立 JObject
            JObject obj3 = JObject.FromObject(new { name = "jack", age = 18 });
            /*顯示
            {
                "name": "jack",
                "age": 18
            }
            */

            //  2.6 用初始化器
            JObject obj5 = new JObject()
            {
                { "name" , "李四" },
                { "age", 29 }
            };

            //  2.7 獲取值
            int id;
            if (obj1["ID"] != null)
            {
                id = obj["ID"].Value<int>();
            }
            JObject _jObject = JObject.Parse("{ID:{ID1:{ID2:'value',name:'valueName'}},'Name':'test','Mark':'Hello Word'}");
            var _value = _jObject["ID"]["ID1"]["ID2"].ToString();    //取值
        }

        /// <summary>新增一個屬性
        /// C#給JSON物件新增一個鍵值對
        /// </summary>
        /// <param name="obj">待新增屬性的物件</param>
        /// <param name="key">鍵名</param>
        /// <param name="value">值</param>
        /// <returns>新增屬性後的物件</returns>
        public static object Add(object obj, string key, object value)
        {
            JObject jObj = JObject.Parse(JsonConvert.SerializeObject(obj));
            jObj.Add(new JProperty(key, value));
            return JsonConvert.DeserializeObject(jObj.ToString());
        }

        /// <summary>新增一個屬性
        /// C#給JSON字串新增一個鍵值對
        /// </summary>
        /// <param name="obj">待新增屬性的物件</param>
        /// <param name="key">鍵名</param>
        /// <param name="value">值</param>
        /// <returns>新增屬性後的物件</returns>
        public static object AddStr(string obj, string key, object value)
        {
            JObject jObj = JObject.Parse(obj);
            jObj.Add(new JProperty(key, value));
            return JsonConvert.DeserializeObject(jObj.ToString());
        }
    }
}