internal static ObjectData ToData(ObjectDataConverter converter, object @object, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { if (session == null) { session = new ObjectDataConvertSession(); } if (session.TryGetConvertedData(@object, out var data)) { return(data); } if (settings == null) { settings = ObjectDataConvertSettings.Default; } var type = @object.GetType(); if (converter == null) { converter = SelectConverter(settings, type); } var members = converter.ToDataMembers(@object, settings, session); data = new ObjectData(type, members); session.AddConverted(@object, data); return(data); }
public Operation(ICommand command) { _command = command; _dataConvertSettings = new ObjectDataConvertSettings(); _dataSession = new ObjectDataConvertSession(); }
public object ToObject(ObjectData data, ObjectDataConvertSettings settings = null, ObjectDataConvertSession session = null) { Ensure.Argument.NotNull(data, nameof(data)); return(ToObject(this, data, settings, session)); }
protected virtual IEnumerable <ObjectData.Member> ToDataMembers( object @object, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { var type = @object.GetType(); return(SelectDataMembers(type).Select(am => new ObjectData.Member( am.Name, Data.ToData(am.GetValue(@object), settings, session)))); }
private static ObjectDataConverter SelectConverter(ObjectDataConvertSettings settings, Type convertType) { if (settings == null) { settings = ObjectDataConvertSettings.Default; } return(SelectConverter(settings.Selector, settings.Converters, convertType)); }
public static Data ToData(object @object, ObjectDataConvertSettings settings = null, ObjectDataConvertSession session = null) { if (ValueData.TryCreate(@object, out var valueData)) { return(valueData); } return(ObjectDataConverter.ToData(null, @object, settings, session)); }
public ObjectData ToData(object @object, ObjectDataConvertSettings settings = null, ObjectDataConvertSession session = null) { if (ValueData.CanCreate(@object)) { throw new ArgumentException($"Object can be only converted to {typeof(ValueData)}", nameof(@object)); } return(ToData(this, @object, settings, session)); }
protected virtual void PopulateObjectMembers(object @object, ObjectData data, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { var type = @object.GetType(); foreach (var member in data.Members) { var am = AssignableMember.Get(type, member.Key, BindingAttributes.Instance); var value = Data.ToObject(member.Value, settings, session); am.SetValue(@object, value); } }
public static object ToObject(Data data, ObjectDataConvertSettings settings = null, ObjectDataConvertSession session = null) { switch (data) { case null: throw new ArgumentNullException(nameof(data)); case ValueData valueData: return(valueData.Value); case ObjectData objectData: return(ObjectDataConverter.ToObject(null, objectData, settings, session)); default: throw new NotSupportedException($"Create object for '{data.GetType()}' is not supported."); } }
internal static object ToObject(ObjectDataConverter converter, ObjectData data, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { if (session == null) { session = new ObjectDataConvertSession(); } if (session.TryGetConvertedObject(data, out var @object)) { return(@object); } if (settings == null) { settings = ObjectDataConvertSettings.Default; } if (converter == null) { converter = SelectConverter(settings, data.ObjectType); } @object = CreateObjectByDataConstructor(data); if (!ReferenceEquals(@object, null)) { session.AddConverted(@object, data); return(@object); } @object = converter.CreateObject(data, settings, session); if (ReferenceEquals(@object, null)) { return(null); } converter.PopulateObjectMembers(@object, data, settings, session); session.AddConverted(@object, data); return(@object); }
public static IEnumerable <object> ToObjects(IEnumerable <Data> datas, ObjectDataConvertSettings settings = null, ObjectDataConvertSession session = null) { return(datas.Select(d => ToObject(d, settings, session))); }
public static IEnumerable <Data> ToDatas(IEnumerable <object> objects, ObjectDataConvertSettings settings = null, ObjectDataConvertSession session = null) { return(objects.Select(o => ToData(o, settings, session))); }
protected virtual object CreateObject(ObjectData data, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { return(Activator.CreateInstance(data.ObjectType, BindingAttributes.DeclareInstance, null, Array.Empty <object>(), CultureInfo.InvariantCulture)); }