首页 > 解决方案 > 将对象从 JSON 转换为浮点数

问题描述

在项目中创建 JSON 设置文件时,我遇到了一件非常奇怪的事情。globalSettings 是一个存储许多设置的容器。

在属性 PreHeight 中,我将新值存储到 globalSetting(这些设置将在应用程序退出时保存到 json 文件中)。为了清楚起见,我什至明确地转换了“价值”(不是真的需要)。

globalSettings["PreHeight"] = (float)value;

当我尝试在启动时重新加载设置时,我首先尝试了以下代码。

   PreHeight = (float)globalSettings["PreHeight"];

令我惊讶的是,它抛出了一个无法投射的异常。然后我只是更改了行以使用语言中性方法 Convert.ToSingle()。在后台它应该做完全相同类型的演员表。令我惊讶的是,使用 Convert.ToSingle() 方法时代码行不会抛出。

   PreHeight = Convert.ToSingle(globalSettings["PreHeight"]);

有人可以解释这种奇怪的行为吗?

我很清楚 JSON 以最简单的数据类型保存,因此 0 被视为整数,但究竟为什么将其转换回浮点数会有问题呢?

标签: c#jsoncasting

解决方案


深入研究后,我得出一个结论,即您的框架只返回一个对象(不是字符串或浮点数)。

因为它不是字符串,所以浮点数。解析失败。

由于它是一个对象,并且 CLR 假定它是一个双精度浮点数(这是默认值),因此 Typecast 运算符无法转换它,因为它可能会丢失精度。这就是类型转换运算符无法工作的原因。替代代码可能是,

 PreHeight = (float) ((double)(globalSettings["PreHeight"]);

Convert.ToSingle 是用来处理双精度到单精度转换的人,它运行良好。

 PreHeight = Convert.ToSingle(globalSettings["PreHeight"]);

是处理这种转换的唯一正确方法。


推荐阅读