| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using Abp.Json;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- namespace Abp.Runtime.Caching
- {
- /// <summary>
- /// A class to hold the Type information and Serialized payload for data stored in the cache.
- /// </summary>
- public class AbpCacheData
- {
- private static readonly IReadOnlyList<string> SystemAssemblyNames = new List<string> { "mscorlib", "System.Private.CoreLib" };
- public AbpCacheData(
- string type, string payload)
- {
- Type = type;
- Payload = payload;
- }
- public string Payload { get; set; }
- public string Type { get; set; }
- public static AbpCacheData Deserialize(string serializedCacheData) => serializedCacheData.FromJsonString<AbpCacheData>();
- public static AbpCacheData Serialize(object obj)
- {
- return new AbpCacheData(
- SerializeType(obj.GetType()).ToString(),
- obj.ToJsonString());
- }
- private static StringBuilder SerializeType(Type type, bool withAssemblyName = true, StringBuilder typeNameBuilder = null)
- {
- typeNameBuilder = typeNameBuilder ?? new StringBuilder();
- if (type.DeclaringType != null)
- {
- SerializeType(type.DeclaringType, false, typeNameBuilder).Append('+');
- }
- else if (type.Namespace != null)
- {
- typeNameBuilder.Append(type.Namespace).Append('.');
- }
- typeNameBuilder.Append(type.Name);
- if (type.GenericTypeArguments.Length > 0)
- {
- SerializeTypes(type.GenericTypeArguments, '[', ']', typeNameBuilder);
- }
- if (!withAssemblyName)
- {
- return typeNameBuilder;
- }
- var assemblyName = type.GetTypeInfo().Assembly.GetName().Name;
- if (!SystemAssemblyNames.Contains(assemblyName))
- {
- typeNameBuilder.Append(", ").Append(assemblyName);
- }
- return typeNameBuilder;
- }
- private static StringBuilder SerializeTypes(Type[] types, char beginTypeDelimiter = '"', char endTypeDelimiter = '"', StringBuilder typeNamesBuilder = null)
- {
- if (types == null)
- {
- return null;
- }
- if (typeNamesBuilder == null)
- {
- typeNamesBuilder = new StringBuilder();
- }
- typeNamesBuilder.Append('[');
- for (int i = 0; i < types.Length; i++)
- {
- typeNamesBuilder.Append(beginTypeDelimiter);
- SerializeType(types[i], true, typeNamesBuilder);
- typeNamesBuilder.Append(endTypeDelimiter);
- if (i != types.Length - 1)
- {
- typeNamesBuilder.Append(',');
- }
- }
- return typeNamesBuilder.Append(']');
- }
- }
- }
|