NET JSON XML相助类

NET JSON XML帮助类

NET JSON除了油实体类转换DLL之外,还有动态的,也就是NET本身自己就支持的东西,顺便提一下使用WebService的时候,哪里需要Webservice的方法 哪里的config里面就要配置Models 也就是 第一次引用的时候自动生成的那一段东东

 

XML的

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace Zemt.BPM.Common
{
    public static class XmlUtil
    {
        public static string ToXml(dynamic dynamicObject)
        {
            DynamicXElement xmlNode = dynamicObject;
            return xmlNode.XContent.ToString();
        }

        public static dynamic ToObject(string xml, dynamic dynamicResult)
        {
            XElement element = XElement.Parse(xml);
            dynamicResult = new DynamicXElement(element);
            return dynamicResult;
        }

        public static dynamic ToObject(string xml)
        {
            XElement element = XElement.Parse(xml);
            dynamic dynamicResult = new DynamicXElement(element);
            return dynamicResult;
        }
    }


    public class DynamicXElement : DynamicObject
    {
        public DynamicXElement(XElement node)
        {
            this.XContent = node;
        }

        public DynamicXElement()
        {
        }

        public DynamicXElement(String name)
        {
            this.XContent = new XElement(name);
        }

        public XElement XContent
        {
            get;
            private set;
        }

        public override bool TrySetMember(
            SetMemberBinder binder, object value)
        {
            XElement setNode = this.XContent.Element(binder.Name);
            if (setNode != null)
                setNode.SetValue(value);
            else
            {
                //creates an XElement without a value.
                if (value.GetType() == typeof(DynamicXElement))
                    this.XContent.Add(new XElement(binder.Name));
                else
                    this.XContent.Add(new XElement(binder.Name, value));
            }
            return true;
        }

        public override bool TryGetMember(
            GetMemberBinder binder, out object result)
        {
            XElement getNode = this.XContent.Element(binder.Name);
            IList<XElement> nodes = this.XContent.Elements(binder.Name).ToList<XElement>();
            if (nodes.Count == 1)
            {
                result = new DynamicXElement(getNode);
            }
            else if(nodes.Count > 1)
            {
                IList<DynamicXElement> des = new List<DynamicXElement>();
                foreach (var e in nodes)
                {
                    des.Add(new DynamicXElement(e));
                }
                result = des;
            }
            else
            {
                result = new DynamicXElement(binder.Name);
            }
            return true;
        }

        public override bool TryConvert(
    ConvertBinder binder, out object result)
        {
            if (binder.Type == typeof(String))
            {
                result = this.XContent.Value;
                return true;
            }
            else
            {
                result = null;
                return false;
            }
        }
    }
}


 

JSON的

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;

namespace Zemt.BPM.Common
{
    public static class JsonUtil
    {
        #region DataTable 转换为Json 字符串
        /// <summary>
        /// DataTable 对象 转换为Json 字符串
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string ToJson(this DataTable dt)
        {
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
            ArrayList arrayList = new ArrayList();
            foreach (DataRow dataRow in dt.Rows)
            {
                Dictionary<string, object> dictionary = new Dictionary<string, object>();  //实例化一个参数集合
                foreach (DataColumn dataColumn in dt.Columns)
                {
                    dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToStr());
                }
                arrayList.Add(dictionary); //ArrayList集合中添加键值
            }

            return javaScriptSerializer.Serialize(arrayList);  //返回一个json字符串
        }
        #endregion

        #region Json 字符串 转换为 DataTable数据集合
        /// <summary>
        /// Json 字符串 转换为 DataTable数据集合
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static DataTable ToDataTable(this string json)
        {
            DataTable dataTable = new DataTable();  //实例化
            DataTable result;
            try
            {
                JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
                javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
                ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
                if (arrayList.Count > 0)
                {
                    foreach (Dictionary<string, object> dictionary in arrayList)
                    {
                        if (dictionary.Keys.Count<string>() == 0)
                        {
                            result = dataTable;
                            return result;
                        }
                        if (dataTable.Columns.Count == 0)
                        {
                            foreach (string current in dictionary.Keys)
                            {
                                dataTable.Columns.Add(current, dictionary[current].GetType());
                            }
                        }
                        DataRow dataRow = dataTable.NewRow();
                        foreach (string current in dictionary.Keys)
                        {
                            dataRow[current] = dictionary[current];
                        }

                        dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
                    }
                }
            }
            catch
            {
            }
            result = dataTable;
            return result;
        }
        #endregion

        #region 转换为string字符串类型
        /// <summary>
        ///  转换为string字符串类型
        /// </summary>
        /// <param name="s">获取需要转换的值</param>
        /// <param name="format">需要格式化的位数</param>
        /// <returns>返回一个新的字符串</returns>
        public static string ToStr(this object s, string format = "")
        {
            string result = "";
            try
            {
                if (format == "")
                {
                    result = s.ToString();
                }
                else
                {
                    result = string.Format("{0:" + format + "}", s);
                }
            }
            catch
            {
            }
            return result;
        }
        #endregion
    }
}


 

xml的获取使用

 List<DynamicXElement> roles = null;
            bool collections = approves.DOAColumnBPM is IEnumerable<dynamic>;
            if (collections)
            {
                roles = approves.DOAColumnBPM;
            }
            else
            {
                roles = new List<DynamicXElement>();
                roles.Add(approves.DOAColumnBPM);
            }
            foreach (var de in roles)
            {
                dynamic d = de;
                string roleName = d.DOARolesInColumnList.DOARolesInColumnBPM.RoleTypeDisplayName;
                if (roleName.Equals(_wfContext.RoleName))
                {
                    List<DynamicXElement> users = null;
                    bool hasMultiUser = d.DOARolesInColumnList.DOARolesInColumnBPM.SystemUserList.SystemUserBPM is IEnumerable<dynamic>;
                    if (hasMultiUser)
                    {
                        users = d.DOARolesInColumnList.DOARolesInColumnBPM.SystemUserList.SystemUserBPM;
                    }
                    else
                    {
                        users = new List<DynamicXElement>();
                        users.Add(d.DOARolesInColumnList.DOARolesInColumnBPM.SystemUserList.SystemUserBPM);
                    }


                    XElement parent = d.DOARolesInColumnList.DOARolesInColumnBPM.SystemUserList.XContent;
                    parent.RemoveNodes();
                    foreach (var ue in users)
                    {
                        dynamic u = ue;
                        parent.Add(u.XContent);
                        this.UserSelector.Items.Add(new ListItem((string)u.UserDisplayNameCN, HttpUtility.HtmlEncode(d.XContent.ToString())));
                        parent.RemoveNodes();
                    }



                    break;
                }
            }


 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。