• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

关于读取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));
}



...全文
206 点赞 收藏 12
写回复
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
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2018-11-22 07:16
社区公告

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