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

namespace IRaCIS.Core.API
{
    public class NullToEmptyStringResolver : DefaultContractResolver
    {
        /// <summary>
        /// 创建属性
        /// </summary>
        /// <param name="type">类型</param>
        /// <param name="memberSerialization">序列化成员</param>
        /// <returns></returns>
        //protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        //{
        //    IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);


        //    foreach (var jsonProperty in properties)
        //    {
        //        jsonProperty.DefaultValue = new NullToEmptyStringValueProvider(jsonProperty);
        //    }

        //    return properties;

        //}

        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        {
            IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);

            var list= type.GetProperties()
                .Select(p =>
                {
                    var jp = base.CreateProperty(p, memberSerialization);
                    jp.ValueProvider = new NullToEmptyStringValueProvider(p);
                    return jp;
                }).ToList();

            var uu = list.Select(t => t.PropertyName).ToList();

            //获取复杂对象属性
          properties =   properties.TakeWhile(t => !uu.Contains(t.PropertyName)).ToList();

          list.AddRange(properties);
          return list;
        }


    }
}