需要实现一个读取json配置文件的功能,原方法为
public T ReadConfig<T>(string name,T defaultValue){
var vaue=JObject[name].ToString();//JObject是Newtonsoft.Json.Linq.JObject.Parse()获取的
if(string.IsNullOrWhiteSpace(value)){
return defaultValue;
}
var r=Newtonsoft.Json.JsonConvert.DeserializeObject(value);
return r;
}
但考虑下,对于bool和int型,如果配置节点中的值无法转换是不是也应该返回defaultValue呢,于是方法变为了
public T ReadConfig<T>(string name,T defaultValue){
var vaue=JObject[name].ToString();//JObject是Newtonsoft.Json.Linq.JObject.Parse()获取的
if(string.IsNullOrWhiteSpace(value)){
return defaultValue;
}else if(typeof(T)==typeof(bool)){
if(!bool.TryParse(value,out var _)){
return defaultValue;
}
}else if(typeof(T).IsPrimitive && typeof(T).IsValueType && typeof(T)!=typeof(char) && !double.TryParse(value,out var _)){
return defaultValue;
}
if(typeof(T)==typeof(string)){
return (T)(object)value;
}
var r=Newtonsoft.Json.JsonConvert.DeserializeObject(value);
return r;
}
因为数值类型是c#的基础类型且为值类型,因此使用IsPrimitive和IsValueType进行判断,但char也满足固去除char.。
欢迎大牛们给出更好的方法。