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

namespace MaterialTraceabilityUI.Common
{
    /// <summary>
    /// Json格式转换
    /// </summary>
    public class JsonChange
    {
        /// <summary>
        /// Model 实体转json
        /// </summary>
        /// <param name="Model">可以是单个实体,也可是实体集(即:ToList())</param>
        /// <returns></returns>
        public static string ModeToJson(object Model)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string str = serializer.Serialize(Model);
            return str;
        }

        /// <summary>
        /// object转dictionary
        /// </summary>
        /// <param name="jsonData"></param>
        /// <returns></returns>
        public static Dictionary<string, object> objectToDictionary(string jsonData)
        {
            Dictionary<string, object> result = new Dictionary<string, object>();

            var inf = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonData);

            foreach (KeyValuePair<string, object> item in inf)
            {
                if (item.Value != null)
                {
                    var type = item.Value.GetType();
                    if (type == typeof(JObject))
                    {
                        var info = objectToDictionary(JsonConvert.SerializeObject(item.Value));
                        foreach (KeyValuePair<string, object> ite in info)
                        {
                            result.Add(ite.Key, ite.Value);
                        }
                        continue;
                    }
                    else if (type == typeof(JArray))
                    {
                        JArray array = (JArray)item.Value;
                        var info = objectToDictionary(JsonConvert.SerializeObject(array[0]));
                        foreach (KeyValuePair<string, object> ite in info)
                        {
                            result.Add(item.Key + ite.Key, ite.Value);
                        }
                        continue;
                    }
                }

                result.Add(item.Key, item.Value);
            }

            return result;
        }



    }
}