using System; using Marr.Data.Converters; using NzbDrone.Common.Reflection; using NzbDrone.Common.Serializer; using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Datastore.Converters { public class ProviderSettingConverter : EmbeddedDocumentConverter { public override object FromDB(ConverterContext context) { if (context.DbValue == DBNull.Value) { return NullConfig.Instance; } var stringValue = (string)context.DbValue; if (string.IsNullOrWhiteSpace(stringValue)) { return NullConfig.Instance; } var ordinal = context.DataRecord.GetOrdinal("ConfigContract"); var contract = context.DataRecord.GetString(ordinal); var impType = typeof (IProviderConfig).Assembly.FindTypeByName(contract); if (impType == null) { throw new ConfigContractNotFoundException(contract); } return Json.Deserialize(stringValue, impType); } } }