我有Dictionary<string, string>
,其中的值可以包含十六进制,布尔值,ushort,float或int。我必须根据某些属性将它们解析为bool
或ushort
。
我要从json文件中获取数据,并在需要时使用Newtonsoft
将其解析为对象。
在没有if's
的情况下,如何在没有大量TryParse()
的情况下实现优雅的效果?
我有一些界面
interface SomeInterface {
IEnumerable Data { get; set; }
}
class SomeClass : SomeInterface {
public IDictionary<string, string> Data { get; set; }
IEnumerable SomeInferface.Data
{
get => Data;
set => Data = (IDictionary<string, string>)value;
}
}
example.json
{
"someproperty": "",
"data": {
"2938": "0x60" // can be "true", "3.14", "250"
}
}
这和往常一样被解析
return JsonConvert.DeserializeObject<IList<T>>(json, new JsonSerializerSettings
{
Error = OnDeserializationError
});
在我的情况下,T
是SomeClass
答案 0 :(得分:0)
我认为没有一种优雅的方法,只需考虑所有可能的情况即可。
对于布尔和十六进制
if(str.Length >= 2)
{
switch(str[1])
{
case 'r'
if(str == "true")
//true
case 'a'
//false
case 'x'
//hex
}
}
其他数字
var d = double.Parse(str);
var i = (int)d;
if(d != i)
//float
else if (i >= 0 && i <= ushort.MaxValue)
//ushort
else
//int