我有一个 JSON 字符串。我想检查它是否包含匿名对象。如果是,则返回该值。如果没有,则返回默认值。然后我希望能够为不同的匿名对象重复多次。
这是我目前实现的代码示例,但显然它每次都是重复的,而且不是很“干净”。
var displayDataBy = 0;
var displayDataByDefinition = new { DisplayDataBy = new { Key = "string", Value = displayDataBy } };
var displayDataByResult = JsonConvert.DeserializeAnonymousType(this.OhdContentPageParameters, displayDataByDefinition);
try { displayDataBy = displayDataByResult.DisplayDataBy.Value; }
catch { }
var xMinsOeeToShow = 480;
var xMinsOeeToShowDefinition = new { XMinsOeeToShow = new { Key = "string", Value = xMinsOeeToShow } };
var xMinsOeeToShowResult = JsonConvert.DeserializeAnonymousType(this.OhdContentPageParameters, xMinsOeeToShowDefinition);
try { xMinsOeeToShow = xMinsOeeToShowResult.XMinsOeeToShow.Value; }
catch { }
我更希望它是一种通用方法,我可以为每种匿名类型调用它。此外,不必依赖 try/catch 也很好。可以做到吗?
更新...
这对 int、bool 和 double 非常有用:
public static T2 DeserializeValue<T, T2>(this string json, T definition, T2 defaultValue, Func<T, T2?> getValueFunc) where T2 : struct
{
var jsonAnon = JsonConvert.DeserializeAnonymousType(json, definition);
return getValueFunc(jsonAnon) ?? defaultValue;
}
我为字符串添加了这个:
public static string DeserializeStringValue<T>(this string json, T definition, string defaultValue, Func<T, string> getValueFunc)
{
var jsonAnon = JsonConvert.DeserializeAnonymousType(json, definition);
return getValueFunc(jsonAnon) ?? defaultValue;
}