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); }
private static bool FindInType( IReadOnlyObjectDataConverterCollection collection, Type type, out ObjectDataConverter converter) { return(type.IsGenericType ? collection.TryGetConverter(type.GetGenericTypeDefinition(), out converter) : collection.TryGetConverter(type, out converter)); }
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 static bool TryGetConverter( this IReadOnlyObjectDataConverterCollection self, Type convertType, out ObjectDataConverter converter) { if (!self.TryGetConverters(convertType, out var converters) || converters.Count == 0) { converter = null; return(false); } converter = converters.First(); return(true); }
private static bool FindInBaseTypes( IReadOnlyObjectDataConverterCollection collection, Type type, out ObjectDataConverter converter) { var p = type.BaseType; while (p != null) { if (FindInType(collection, p, out converter)) { return(true); } p = p.BaseType; } converter = null; return(false); }
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); }
private static bool FindInInterfaces( IReadOnlyObjectDataConverterCollection collection, Type type, out ObjectDataConverter converter) { var interfaces = type.GetMostDerivedInterfaces(); foreach (var @interface in interfaces) { if (FindInType(collection, @interface, out converter)) { return(true); } } foreach (var @interface in interfaces) { if (FindInInterfaces(collection, @interface, out converter)) { return(true); } } converter = null; return(false); }