JsonUtil.cs 5.5 KB
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AOI
{
    public class JsonUtil
    {
        /// <summary>
        /// 将对象序列化为JSON格式
        /// </summary>
        /// <param name="o">对象</param>
        /// <returns>json字符串</returns>
        public static string SerializeObject(object o)
        {
            string json = JsonConvert.SerializeObject(o);
            return json;
        }

        /// <summary>
        /// 将对象序列化为JSON格式
        /// </summary>
        /// <param name="o">对象</param>
        /// <returns>json字符串</returns>
        public static bool SerializeObjectToFile(object o, string filePath, bool backUp)
        {
            try
            {
                string json = JsonConvert.SerializeObject(o);
                if (File.Exists(filePath))
                {
                    if (backUp)
                    {
                        //String Path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

                        string backUpPath = filePath + "." + DateTime.Now.ToString("yyyyMMddHHmmssfff");
                        File.Copy(filePath, backUpPath);
                    }
                    File.Delete(filePath);
                }
                File.WriteAllText(filePath, json);
                return true;
            }
            catch (Exception ex)
            {
                //LogUtil.error("保存文件到[" + filePath + "]失败:" + ex.Message);
            }
            return false;
        }

        /// <summary>
        /// 解析JSON字符串生成对象实体
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
        /// <returns>对象实体</returns>
        public static T DeserializeJsonToObject<T>(string json) where T : class
        {
            JsonSerializer serializer = new JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
            T t = o as T;
            return t;
        }

        /// <summary>
        /// 解析文件到生成对象实体
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
        /// <returns>对象实体</returns>
        public static T DeserializeJsonToObjectFromFile<T>(string filePath) where T : class
        {
            if (!File.Exists(filePath))
            {
                //LogUtil.error("加载:文件[" + filePath + "]不存在");
                return null;
            }
            using (StreamReader r = new StreamReader(filePath))
            {
                using (JsonReader reader = new JsonTextReader(r))
                {
                    JsonSerializer serializer = new JsonSerializer();
                    T t = serializer.Deserialize<T>(reader);
                    return t;
                }
            }
            //string jsonTxt = File.ReadAllText(filePath);
            //JsonSerializer serializer = new JsonSerializer();
            //StringReader sr = new StringReader(jsonTxt);
            //object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
            //T t = o as T;
            //return t;
        }

        /// <summary>
        /// 解析JSON数组生成对象实体集合
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
        /// <returns>对象实体集合</returns>
        public static List<T> DeserializeJsonToList<T>(string json) where T : class
        {
            JsonSerializer serializer = new JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
            List<T> list = o as List<T>;
            return list;
        }

        /// <summary>
        /// 解析文件
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
        /// <returns>对象实体集合</returns>
        public static List<T> DeserializeJsonToListFromFile<T>(string filePath) where T : class
        {
            if (!File.Exists(filePath))
            {
                //LogUtil.error("加载:文件[" + filePath + "]不存在");
                return new List<T>();
            }
            string jsonTxt = File.ReadAllText(filePath);
            JsonSerializer serializer = new JsonSerializer();
            StringReader sr = new StringReader(jsonTxt);
            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
            List<T> list = o as List<T>;
            return list;
        }

        /// <summary>
        /// 反序列化JSON到给定的匿名对象.
        /// </summary>
        /// <typeparam name="T">匿名对象类型</typeparam>
        /// <param name="json">json字符串</param>
        /// <param name="anonymousTypeObject">匿名对象</param>
        /// <returns>匿名对象</returns>
        public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
        {
            T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
            return t;
        }
    }
}