zoukankan      html  css  js  c++  java
  • 垃圾JSON

    public static string ToJson<T>(IEnumerable<T> enumerable) where T : new()
            {
                var tor = enumerable.GetEnumerator();
                if (!tor.MoveNext())
                {
                    return "[]";
                }
                StringBuilder result = new StringBuilder("[");
                var entityType = typeof(T);
                do
                {
                    bool first = true;
                    foreach (var property in EntityUtility.GetEnumerable(entityType))
                    {
                        if (!property.EntityProperty.CanRead)
                        {
                            continue;
                        }
                        if (first)
                        {
                            result.Append('{').Append(property.MappedName).Append(':');
                            AppendJSONValue(result, property.EntityProperty.PropertyType, property.GetValue(tor.Current));
                            first = false;
                        }
                        else
                        {
                            result.Append(',').Append(property.MappedName).Append(':');
                            AppendJSONValue(result, property.EntityProperty.PropertyType, property.GetValue(tor.Current));
                        }
                    }
                    result.Append("},");
                }
                while (tor.MoveNext());
                result.Length--;
                return result.Append(']').ToString();
            }
    
            public static IEnumerable<T> ToEnumerable<T>(string json) where T : new()
            {
                string[] array = Regex.Split(json, ",{");
                if (array.Length == 0)
                {
                    yield break;
                }
                var entityType = typeof(T);
                Func<string, T> func = jObj =>
                {
                    T entity = Activator.CreateInstance<T>();
                    foreach (var property in EntityUtility.GetEnumerable(entityType))
                    {
                        if (!property.EntityProperty.CanWrite)
                        {
                            continue;
                        }
                        foreach (string dictionarys in jObj.Split(','))
                        {
                            string[] dictionary = dictionarys.Split(':');
                            if (dictionary.Length == 2 && dictionary[0] == property.MappedName)
                            {
                                switch (Type.GetTypeCode(property.EntityProperty.PropertyType))
                                {
                                    case TypeCode.Boolean:
                                        property.SetValue(entity, dictionary[1] == "true");
                                        break;
                                    case TypeCode.DateTime:
                                        string[] time = dictionary[1].Substring(9, dictionary[1].Length - 10).Split(',');
                                        property.SetValue(entity, new DateTime(int.Parse(time[0]), int.Parse(time[1]) + 1, int.Parse(time[2]), int.Parse(time[3]), int.Parse(time[4]), int.Parse(time[5])));
                                        break;
                                    case TypeCode.String:
                                        property.SetValue(entity, dictionary[1].Substring(1, dictionary[1].Length - 2));
                                        break;
                                    default:
                                        property.SetValue(entity, property.ChangeType(dictionary[1]));
                                        break;
                                }
                            }
                        }
                    }
                    return entity;
                };
                yield return func(String.Concat("{", array[0]));
                for (int i = 1; i < array.Length; i++)
                {
                    yield return func(array[i]);
                }
            }
            internal static void AppendJSONValue(StringBuilder buffer, Type type, object value)
            {
                if (value == null)
                {
                    buffer.Append("null");
                    return;
                }
                switch (Type.GetTypeCode(type))
                {
                    case TypeCode.Boolean:
                        buffer.Append(value.ToString().ToLower());
                        break;
                    case TypeCode.DateTime:
                        DateTime time = Convert.ToDateTime(value);
                        buffer.Append("new Date(")
                            .Append(time.Year).Append(',')
                            .Append(time.Month - 1).Append(',')
                            .Append(time.Day).Append(',')
                            .Append(time.Hour).Append(',')
                            .Append(time.Minute).Append(',')
                            .Append(time.Second).Append(')');
                        break;
                    case TypeCode.String:
                        buffer.Append('"').Append(value.ToString()
                            .Replace("\r\n", string.Empty)
                            .Replace("\n", string.Empty)
                            .Replace("\"", string.Empty)).Append('"');
                        break;
                    default:
                        buffer.Append(value);
                        break;
                }
            }
  • 相关阅读:
    HackerRank
    HackerRank
    LeetCode "Kth Smallest Element in a BST"
    HackerRank
    HackerRank
    LeetCode "Roman to Integer"
    LeetCode "Integer to Roman"
    LeetCode "Majority Element II"
    HackerRank
    HackerRank
  • 原文地址:https://www.cnblogs.com/Googler/p/2516657.html
Copyright © 2011-2022 走看看