Используя вспомогательный класс для обобщения выполняемых вами операций,
public static class DeserializeHelpers {
public static T2 DeserializeValue<T,T2>(this string s, T def, T2 defans, Func<T, T2?> getAnsFn) where T2 : struct {
var jsonAnon = JsonConvert.DeserializeAnonymousType(s, def);
return getAnsFn(jsonAnon) ?? defans;
}
public static T2 DeserializeClass<T,T2>(this string s, T def, T2 defans, Func<T, T2> getAnsFn) where T2 : class {
var jsonAnon = JsonConvert.DeserializeAnonymousType(s, def);
return getAnsFn(jsonAnon) ?? defans;
}
}
Вы можете немного упростить свой код следующим образом.Я оставил некоторые подробные кодировки, так как вы, похоже, шли на все, чтобы не указывать явный тип для Value
, но я был вынужден предположить, что это был тип значения, позволяющий null
возвращать из метода доступа к элементулямбда.Если класс может быть возвращен, вам нужно будет использовать помощник класса.
var displayDataBy = 0;
var displayDataByDefinition = new { DisplayDataBy = new { Key = "string", Value = displayDataBy } };
var displayDataByResult = this.OhdContentPageParameters.DeserializeValue(displayDataByDefinition, displayDataBy, x => x.DisplayDataBy?.Value);
var xMinsOeeToShow = 480;
var xMinsOeeToShowDefinition = new { XMinsOeeToShow = new { Key = "string", Value = xMinsOeeToShow } };
var xMinsOeeToShowResult = this.OhdContentPageParameters.DeserializeValue(xMinsOeeToShowDefinition, xMinsOeeToShow, x => x.XMinsOeeToShow?.Value);
Я использовал метод расширения для Deserialize...
, но, конечно, это мог быть обычный метод.
Если вам не нужно повторно использовать определение анонимного типа, вы можете передать это встроенное значение методу Deserialize...
.