Xml/Json与实体的相互转换

1.先引用DLL(Newtonsoft.Json.dll),已上传DLL

/*************************************************
 * 描述:
 * 
 * Author:yuanshuo
 * Date:2021/11/15 17:14:59
 * Update:
 * ************************************************/

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;

namespace Common.DataConversion_Helper
{
    /// <summary>
    /// 数据转换操作(XML\Json与实体类的相互转换
    /// </summary>
    public class ConverOper
    {
        #region  Xml相关
        /// <summary>
        /// 序列化xml
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string GetXmlByObjet<T>(T obj)
        {
            try
            {
                using (StringWriter sw = new StringWriter())
                {
                    Type t = obj.GetType();
                    XmlSerializer serializer = new XmlSerializer(obj.GetType());
                    serializer.Serialize(sw, obj);
                    sw.Close();
                    return sw.ToString();
                }
            }
            catch (Exception ex)
            {
                string text = $"实体序列化xml失败;失败原因:{ex.Message}";
                return text;
            }

        }


        /// <summary>
        /// 反序列化xml
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="strXML"></param>
        /// <returns></returns>
        public static T GetTByXml<T>(string strXML) where T : class
        {
            try
            {
                using (StringReader sr = new StringReader(strXML))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    return serializer.Deserialize(sr) as T;
                }
            }
            catch (Exception ex)
            {
                //string text=$"xml反序列化实体失败{ex} ";
                return null;
            }
        }


        /// <summary>
        /// 格式化xml
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static string GetXmlByFormat(string xml)
        {
            string resultXml = xml;
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);

                System.IO.StringWriter sw = new System.IO.StringWriter();
                using (System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(sw))
                {
                    writer.Indentation = 2;  // the Indentation
                    writer.Formatting = System.Xml.Formatting.Indented;
                    doc.WriteContentTo(writer);
                    writer.Close();
                }
                resultXml = sw.ToString();
            }
            catch (Exception ex)
            {
                resultXml = $"格式化xmlm出错:{ex.Message}";
            }
            return resultXml;
        }


        /// <summary>
        /// 解析XML,匹配替换模板中的内容
        /// </summary>
        /// <param name="content">模板内容</param>
        /// <param name="obj">模板对应的对象</param>
        /// <param name="GetType">模板对应的对象的类的类型</param>
        /// <returns></returns>
        public static string ParseXML(string content, object obj, Type GetType)
        {
            //结束贪婪模式
            Regex r = new Regex(@"\{(\w+?)\}");
            MatchCollection matches = r.Matches(content);
            foreach (Match matche in matches)
            {
                #region 匹配替换
                //提取组
                Group g = matche.Groups[1];
                //属性名
                string key = g.Value;
                //属性
                var property = GetType.GetProperty(key);
                //属性里面的值
                string value = "";
                if (property != null)
                {
                    object proobj = property.GetValue(obj, null);
                    if (proobj != null)
                    {
                        value = proobj.ToString();
                    }
                }
                else
                {
                    string nullstr = "";
                }
                Regex r1 = new Regex(@"\{" + key + @"\}");
                content = r1.Replace(content, value);
                #endregion
            }
            return content;
        }


        #endregion Xml相关

        #region  Json相关
        private static JsonSerializerSettings InitSettings(bool camelCasePropertyName)
        {
            JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings();
            JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() =>
            {
                //日期类型默认格式化处理  
                jsonSerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
                jsonSerializerSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ss.fff";

                if (camelCasePropertyName)
                {
                    //序列化时 指定Key的处理方式,为驼峰式
                    jsonSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                }
                jsonSerializerSettings.Formatting = Newtonsoft.Json.Formatting.None;

                //忽略值为空的属性
                jsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore;

                return jsonSerializerSettings;
            });

            return jsonSerializerSettings;
        }

        /// <summary>
        /// 序列化对象到JSON字符串
        /// </summary>
        /// <param name="value">待序列化的对象</param>
        /// <returns>序列化后的JSON字符串</returns>
        public static string GetJsonByObject(object value)
        {
            return JsonConvert.SerializeObject(value, InitSettings(false));
        }

        /// <summary>
        /// 序列化对象到JSON字符串,指定Key的处理方式为驼峰命名法
        /// </summary>
        /// <param name="value">待序列化的对象</param>
        /// <returns>序列化后的JSON字符串</returns>
        public static string GetJsonByObjectCamelCase(object value)
        {
            return JsonConvert.SerializeObject(value, InitSettings(true));
        }

        /// <summary>
        /// 反序列化JSON字符串到实体对象
        /// </summary>
        /// <typeparam name="T">实体对象类型</typeparam>
        /// <param name="json">待反序列化的JSON字符串</param>
        /// <returns>反序列化后的实体对象</returns>
        public static T GetEntityByJson<T>(string json)
        {
            return json == null ? default(T) : JsonConvert.DeserializeObject<T>(json, InitSettings(false));
        }

        /// <summary>
        /// 反序列化JSON字符串到实体对象,指定Key的处理方式为驼峰命名法
        /// </summary>
        /// <typeparam name="T">实体对象类型</typeparam>
        /// <param name="json">待反序列化的JSON字符串</param>
        /// <returns>反序列化后的实体对象</returns>
        public static T GetEntityByJsonCamelCase<T>(string json)
        {
            return json == null ? default(T) : JsonConvert.DeserializeObject<T>(json, InitSettings(true));
        }

        /// <summary>
        /// 反序列化JSON字符串到对象
        /// </summary>
        /// <param name="json">待反序列化的JSON字符串</param>
        /// <returns>反序列化后的对象</returns>
        public static object GetObjectByJson(string json)
        {
            return json == null ? null : JsonConvert.DeserializeObject(json, InitSettings(false));
        }

        /// <summary>
        /// 反序列化JSON字符串到对象,指定Key的处理方式为驼峰命名法
        /// </summary>
        /// <param name="json">待反序列化的JSON字符串</param>
        /// <returns>反序列化后的对象</returns>
        public static object GetObjectByJsonCamelCase(string json)
        {
            return json == null ? null : JsonConvert.DeserializeObject(json, InitSettings(true));
        }
       
        #endregion json相关

    }
}
原文地址:https://www.cnblogs.com/yuanshuo/p/15557492.html