public static bool RemoveData([NotNull] this IExtendableObject extendableObject, string name) { if (extendableObject.ExtensionData == null) { return(false); } var json = JsonSerializer.Deserialize <Dictionary <string, Object> >(extendableObject.ExtensionData); var token = json[name]; if (token == null) { return(false); } json.Remove(name); var data = JsonSerializer.Serialize(json); if (data == "{}") { data = null; } extendableObject.ExtensionData = data; return(true); }
public static T GetData <T>(this IExtendableObject extendableObject, string name, JsonSerializer jsonSerializer) { CheckNotNull(extendableObject, 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 bool RemoveData([NotNull] this IExtendableObject extendableObject, string name) { if (extendableObject == null) { throw new ArgumentNullException(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); }
public static T GetData <T>(this IExtendableObject extendableObject, string name, JsonSerializer jsonSerializer) { CheckNotNull(extendableObject, name); if (extendableObject.ExtensionData == null) { return(default);
public void Extend(StarSystem system) { Coords sectorCoords = new Coords(system.Coords.SectorIndexX, system.Coords.SectorIndexY); if (sectors.Contains(sectorCoords)) { string baseDir = string.Format( "./Data/Sector/s.{0}.{1}/Systems/s.{2}", sectorCoords.SectorIndexX, sectorCoords.SectorIndexY, system.SysNum ); Dictionary <string, string> properties = new Dictionary <string, string>(); if (Directory.Exists(baseDir)) { string filename = Path.Combine(baseDir, "properties.txt"); properties = ReadProperties(filename); IExtendableObject obj = system as IExtendableObject; if (obj != null) { foreach (var key in properties.Keys) { obj.ExtendedProperties.SetValue(key.ToLower(), properties[key]); } } } } }
public void Extend(SystemBody body) { Coords sectorCoords = new Coords(body.StarSystem.Coords.SectorIndexX, body.StarSystem.Coords.SectorIndexY); if (sectors.Contains(sectorCoords)) { string baseDir = GetExtentionDir(body); Dictionary <string, string> properties = new Dictionary <string, string>(); if (Directory.Exists(baseDir)) { string filename = Path.Combine(baseDir, "properties.txt"); properties = ReadProperties(filename); IExtendableObject obj = body as IExtendableObject; if (obj != null) { foreach (var key in properties.Keys) { obj.ExtendedProperties.SetValue(key.ToLower(), properties[key]); } } } } }
public static void SetData <T>([NotNull] this IExtendableObject extendableObject, [NotNull] string name, T value) { if (extendableObject.ExtensionData == null) { if (EqualityComparer <T> .Default.Equals(value, default(T))) { return; } extendableObject.ExtensionData = "{}"; } var json = JsonSerializer.Deserialize <Dictionary <string, Object> >(extendableObject.ExtensionData); if (value == null || EqualityComparer <T> .Default.Equals(value, default(T))) { if (json[name] != null) { json.Remove(name); } } json.Add(name, value); var data = JsonSerializer.Serialize(json); if (data == "{}") { data = null; } extendableObject.ExtensionData = data; }
public static bool RemoveData(this IExtendableObject extendableObject, string name) { CheckNotNull(extendableObject, name); 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); }
public ExtendedObjectTracker(IExtendableObject entity, string key) { _entity = entity; _key = key; Obj = entity.GetData <T>(key); _beginJson = JsonConvert.SerializeObject(Obj); }
public static List <KeyValuePair <string, string> > GetKeyValuePairData( this IExtendableObject extendableObject) { JObject json = JObject.Parse(extendableObject.ExtensionData); Dictionary <string, string> kVP = (Dictionary <string, string>)json.ToObject(typeof(Dictionary <string, string>)); return(kVP.ToList <KeyValuePair <string, string> >()); }
public static T GetData <T>([NotNull] this IExtendableObject extendableObject, [NotNull] string name) { if (extendableObject.ExtensionData == null) { return(default(T)); } var json = JsonSerializer.Deserialize <Dictionary <string, JsonElement> >(extendableObject.ExtensionData); var prop = json[name]; return(prop.Get <T>()); }
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 void SetData <T>([NotNull] this IExtendableObject extendableObject, [NotNull] string name, [CanBeNull] T value, [CanBeNull] JsonSerializer jsonSerializer) { if (extendableObject == null) { throw new ArgumentNullException(nameof(extendableObject)); } if (name == null) { throw new ArgumentNullException(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 void SetData <T>(this IExtendableObject extendableObject, string name, T value, bool handleType = false) { extendableObject.SetData( name, value, handleType ? new JsonSerializer { TypeNameHandling = TypeNameHandling.All } : JsonSerializer.CreateDefault() ); }
private static void SetMemberByName <TMember>(this IExtendableObject dynamicObject, TMember value, string memberName) { lock (dynamicObject) { if (dynamicObject.Cache.ContainsKey(memberName)) { dynamicObject.Cache[memberName] = value; } else { dynamicObject.Cache.Add(memberName, value); } } }
/// <summary> /// The first time when the function is invoked for a specific member, the member value is evaluated. Further calls will return always the same value. /// </summary> /// <typeparam name="TMember">The type of the member.</typeparam> /// <param name="dynamicObject">The extendable object on which the extension is invoked.</param> /// <param name="getInitialValue">A function that returns the initial member value.</param> /// <param name="memberNameOrKey">When specified, overrides the member name of the calling function that is used as a key for the value cache.</param> /// <param name="initializeWhenDefault">Determines whether the value is reevaluated as long as the previous evaluation returned the default of the value type.</param> /// <param name="forceRefresh">Determines whether the value should be reevaluated again, even if its already initialized.</param> /// <param name="onInitialized">A hook that can be specified, to determine whether the value was initialized and/or to modify the value before it is stored.</param> /// <returns>The member value.</returns> public static TMember Get <TMember>(this IExtendableObject dynamicObject, Func <TMember> getInitialValue, [CallerMemberName] string memberNameOrKey = null, bool initializeWhenDefault = false, bool forceRefresh = false, Action <TMember> onInitialized = null) { if (memberNameOrKey == null) { throw new ArgumentNullException(nameof(memberNameOrKey)); } var memberName = memberNameOrKey; if (forceRefresh || !dynamicObject.Cache.TryGetValue(memberName, out var member) || initializeWhenDefault && Equals(member, default(TMember))) { lock (dynamicObject) { if (forceRefresh || !dynamicObject.Cache.TryGetValue(memberName, out member) || initializeWhenDefault && Equals(member, default(TMember))) { member = getInitialValue == null ? default(TMember) : getInitialValue(); if (onInitialized != null) { #pragma warning disable CS8604 // Possible null reference argument. onInitialized((TMember)member); #pragma warning restore CS8604 // Possible null reference argument. } var cache = dynamicObject.Cache; if (cache.ContainsKey(memberName)) { cache[memberName] = member; } else { cache.Add(memberName, member); } } } } #pragma warning disable CS8603 // Possible null reference return. return((TMember)member); #pragma warning restore CS8603 // Possible null reference return. }
public static T GetData <T>(this IExtendableObject extendableObject, string name, bool handleType = false) { CheckNotNull(extendableObject, name); if (extendableObject == null) { throw new ArgumentNullException(nameof(extendableObject)); } if (name == null) { throw new ArgumentNullException(nameof(name)); } return(extendableObject.GetData <T>( name, handleType ? new JsonSerializer { TypeNameHandling = TypeNameHandling.All } : JsonSerializer.CreateDefault() )); }
public static void MapAdditionalProperties <TEntity>(this EntityEntry <TEntity> entry, IExtendableObject target) where TEntity : class { foreach (var item in entry.Metadata.GetProperties().Where(p => p.IsShadowProperty())) { if (item == entry.Metadata.GetDiscriminatorProperty()) { continue; } var value = entry.CurrentValues[item]; target.AdditionalProperties.Add(item.Name.ToLower(), value); } }
/// <summary> /// Sets the value of a extension property. /// </summary> /// <typeparam name="TMember">The type of the extension property.</typeparam> /// <param name="dynamicObject">The dynamic object on which the extension is invoked.</param> /// <param name="value">The value that should be set.</param> /// <param name="memberName">The name / key of the member.</param> public static void Set <TMember>(this IExtendableObject dynamicObject, TMember value, [CallerMemberName] string memberName = null) { dynamicObject.SetMemberByName(value, memberName.NullCheck()); }
public static void ClearCache(this IExtendableObject dynamicObject) { dynamicObject.Cache.Clear(); }
/// <summary> /// Determines whether a member with the specified name is already available in the dynamic object cache. /// </summary> /// <param name="dynamicObject">The dynamic object on which the extension is invoked.</param> /// <param name="memberName">The name / key of the member to look for.</param> /// <returns>true, if a member entry exists, otherwise false.</returns> public static bool HasMember(this IExtendableObject dynamicObject, String memberName) { var hasMember = dynamicObject.Cache.ContainsKey(memberName); return(hasMember); }
public static void UpdateAdditionalProperties <TEntity>(this EntityEntry <TEntity> entry, IExtendableObject target) where TEntity : class { foreach (var item in entry.Metadata.GetProperties().Where(p => p.IsShadowProperty())) { if (item == entry.Metadata.GetDiscriminatorProperty()) { continue; } if (target.AdditionalProperties.TryGetValue(item.Name.ToLower(), out var value)) { if (value is JsonElement json) { value = System.Text.Json.JsonSerializer.Deserialize(json.GetRawText(), item.ClrType); } entry.CurrentValues[item] = value; } } }
public static ExtendedObjectTracker <T> GetTrackedData <T>( this IExtendableObject extendableObject, string name) { return(new ExtendedObjectTracker <T>(extendableObject, name)); }