关于读取json时捕捉小数类型的问题,在线等 谢谢

enaking 2018-11-22 07:16:33
因为我收到的json类型及结构都不是固定的,无法预知的,所以要根据其结构和类型做不同的处理,
比如json数据(这里只是列了一个简单的json):
{
"emp": [
{ "Name":"John" , "Height":1.75 },
{ "Name":"Anna" , "Height":2.0 },
{ "Name":"Peter" , "Height":2.111111111 },
{ "Name":"aMao" , "Height":2 }
]
}

因为要根据不同类型做不同的处理,先写了一个简单的demo,。本来预想的是读到小数然后用dn is float来判断,结果没达到,走到other去了,结果如下图所示,也试过double和decimal也不行,如何判断出小数,尽量希望能用dn is 类型判断出来,谢谢。

else if (dn is string)
{
tn.Nodes.Add("string_"+strKey+(string)dn);
}
else if (dn is bool)
{
tn.Nodes.Add("bool_" + Convert.ToString(dn));
}
else if (dn is int)
{
tn.Nodes.Add("int_" + strKey+ Convert .ToString( dn));
}
else if (dn is float)
{
tn.Nodes.Add("float_" + strKey + Convert.ToString(dn));//希望小数在这里处理业务。
}
else if (dn == null)
{
tn.Nodes.Add("null_" + strKey + Convert.ToString(dn));
}
else
{
tn.Nodes.Add("other_" + strKey + Convert.ToString(dn));
}



...全文
580 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
stherix 2018-11-23
  • 打赏
  • 举报
回复
你用的JavaScriptSerializer反序列化成dynamic的话 其实是生成Dictionary 浮点数将会转成decimal
enaking 2018-11-23
  • 打赏
  • 举报
回复
我把问题说简单点吧,其实就相当于

dynamic[] dn={1,2,2.0,2.111,1.72,"aaa","等 等"}

foreach(dynamic dnEach in dn)
{
else if (dn is string)
{

}
else if (dn is bool)
{

}
else if (dn is int)
{

}
else if (dn is float)
{
//希望小数在这里处理业务。
}
else if (dn == null)
{

}
else
{

}


}


enaking 2018-11-23
  • 打赏
  • 举报
回复
然后用递归dn。
enaking 2018-11-23
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
你是如何(后是用什么工具)做 json 解码的?


JavaScriptSerializer js = new JavaScriptSerializer();
dynamic dn = js.Deserialize<dynamic>(strJson);
xuzuning 2018-11-23
  • 打赏
  • 举报
回复
你是如何(后是用什么工具)做 json 解码的?
enaking 2018-11-23
  • 打赏
  • 举报
回复
接收我知道,转成decimal、float,double都肯定是可以的,我是想知道,如果value是像1.75这些小数,如果通过dn(dynamic类型) dn is 类型来判断出这是一个小数,然后执行小数的业务,这个类型应该是一个什么 ,我试了dn is decimal、float,double都不行。
正怒月神 2018-11-23
  • 打赏
  • 举报
回复
float.tryparse()
  • 打赏
  • 举报
回复
统一用decimal接收数字不行吗?
enaking 2018-11-23
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
不知道你的代码是怎么写的
他实际已经告诉你数据类型了

            dynamic dn = js.Deserialize<dynamic>(strJson);
foreach (var r in dn)
{
Console.WriteLine(r.Key);
foreach (var t in r.Value)
{
foreach (var k in t.Keys)
{
Console.WriteLine("{0} => {1} [{2}]", k, t[k], t[k].GetType().Name);
}
}
}

谢谢,我写成小写的Decimal了
xuzuning 2018-11-23
  • 打赏
  • 举报
回复
不知道你的代码是怎么写的
他实际已经告诉你数据类型了

            dynamic dn = js.Deserialize<dynamic>(strJson);
foreach (var r in dn)
{
Console.WriteLine(r.Key);
foreach (var t in r.Value)
{
foreach (var k in t.Keys)
{
Console.WriteLine("{0} => {1} [{2}]", k, t[k], t[k].GetType().Name);
}
}
}
xuzuning 2018-11-22
  • 打赏
  • 举报
回复
若无额外声明 小数类型 都是 double
enaking 2018-11-22
  • 打赏
  • 举报
回复

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧