В сериализаторе у меня есть
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var enumText = reader.Value.ToString();
var enumType = Nullable.GetUnderlyingType(objectType) ?? objectType;
var defaultValue = GetDefault(objectType);
//TODO: If empty or invalid, return null
if (enumText == string.Empty)
{
return defaultValue;
}
...
}
objectType равен System.Nullable``1[[SomeEnum]]
, где SomeEnum - это обычное перечисление
Что должно быть GetDefault
для возврата экземпляра System.Nullable[SomeEnum]
значение null
?
Я пытался Activator.CreateInstance(objectType);
, который возвращает null
вместо (SomeEnum?)null
Я также пытался
public object GetDefault(Type t)
{
return GetType().GetMethod("GetDefaultGeneric").MakeGenericMethod(t).Invoke(this, null);
}
public T GetDefaultGeneric<T>()
{
return default(T);
}
, который также возвращает ноль
Можно ли вернуть (SomeEnum?)null
, но из объекта Type?
Я проверяю это с помощью модульного теста, подобного следующему:
var converter = new CustomStringEnumConverter();
var result = converter.ReadJson(_readerMock.Object, nullableEnumType, "bad value", new JsonSerializer());
result.Should().BeOfType(GetUnderlyingType(nullableEnumType));
result.Should().Be(GetValue(nullableEnumType, null));
Тест проходит, если я возвращаю (SomeEnum?) null
но не получается, если результат null