| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- using System.Collections.Generic;
- using Abp.Reflection;
- using JetBrains.Annotations;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- namespace Abp.Domain.Entities
- {
- public static class ExtendableObjectExtensions
- {
- public static T GetData<T>([NotNull] this IExtendableObject extendableObject, [NotNull] string name, bool handleType = false)
- {
- return extendableObject.GetData<T>(
- name,
- handleType
- ? new JsonSerializer { TypeNameHandling = TypeNameHandling.All }
- : JsonSerializer.CreateDefault()
- );
- }
- public static T GetData<T>([NotNull] this IExtendableObject extendableObject, [NotNull] string name, [CanBeNull] JsonSerializer jsonSerializer)
- {
- Check.NotNull(extendableObject, nameof(extendableObject));
- Check.NotNull(name, nameof(name));
- if (extendableObject.ExtensionData == null)
- {
- return default(T);
- }
- var json = JObject.Parse(extendableObject.ExtensionData);
- var prop = json[name];
- if (prop == null)
- {
- return default(T);
- }
- if (TypeHelper.IsPrimitiveExtendedIncludingNullable(typeof(T)))
- {
- return prop.Value<T>();
- }
- else
- {
- return (T)prop.ToObject(typeof(T), jsonSerializer ?? JsonSerializer.CreateDefault());
- }
- }
- public static void SetData<T>([NotNull] this IExtendableObject extendableObject, [NotNull] string name, [CanBeNull] T value, bool handleType = false)
- {
- extendableObject.SetData(
- name,
- value,
- handleType
- ? new JsonSerializer {TypeNameHandling = TypeNameHandling.All}
- : JsonSerializer.CreateDefault()
- );
- }
- public static void SetData<T>([NotNull] this IExtendableObject extendableObject, [NotNull] string name, [CanBeNull] T value, [CanBeNull] JsonSerializer jsonSerializer)
- {
- Check.NotNull(extendableObject, nameof(extendableObject));
- Check.NotNull(name, nameof(name));
- if (jsonSerializer == null)
- {
- jsonSerializer = JsonSerializer.CreateDefault();
- }
- if (extendableObject.ExtensionData == null)
- {
- if (EqualityComparer<T>.Default.Equals(value, default(T)))
- {
- return;
- }
- extendableObject.ExtensionData = "{}";
- }
- var json = JObject.Parse(extendableObject.ExtensionData);
- if (value == null || EqualityComparer<T>.Default.Equals(value, default(T)))
- {
- if (json[name] != null)
- {
- json.Remove(name);
- }
- }
- else if (TypeHelper.IsPrimitiveExtendedIncludingNullable(value.GetType()))
- {
- json[name] = new JValue(value);
- }
- else
- {
- json[name] = JToken.FromObject(value, jsonSerializer);
- }
- var data = json.ToString(Formatting.None);
- if (data == "{}")
- {
- data = null;
- }
- extendableObject.ExtensionData = data;
- }
- public static bool RemoveData([NotNull] this IExtendableObject extendableObject, string name)
- {
- Check.NotNull(extendableObject, nameof(extendableObject));
- if (extendableObject.ExtensionData == null)
- {
- return false;
- }
- var json = JObject.Parse(extendableObject.ExtensionData);
- var token = json[name];
- if (token == null)
- {
- return false;
- }
- json.Remove(name);
- var data = json.ToString(Formatting.None);
- if (data == "{}")
- {
- data = null;
- }
- extendableObject.ExtensionData = data;
- return true;
- }
- //TODO: string[] GetExtendedPropertyNames(...)
- }
- }
|