3

因为 JSON 是一种可以写成字符串的格式,所以它必须由库解释,或者有时由语言本身解释。

在旧版本的 C# 中没有这样的东西。使用 LitJSON 库我有以下问题我有一个名为 Vector3 的类,其中包含 3 个浮点值(不是双精度值)。

public class Vector3 {
 public float x{get;set;}
 public float y{get;set;}
 public float z{get;set;}
}

使用以下带有 LitJSON 的代码片段,它实际上应该用值填充 Vector3 的实例。

Vector3 test = JsonMapper.ToObject<Vector3>("{'x':1.0,'y':1.0,'z':1.0}");

但是发生错误“无法将值(类型 Single.Double)分配给 System.Single”

似乎它只知道双倍但不知道浮点数:/

有什么解决办法吗?

4

3 回答 3

5

遇到同样的问题,终于找到了解决办法。在“ToObject”/“ToJson”之前添加这些代码行

JsonMapper.RegisterExporter<float>((obj, writer) => writer.Write(Convert.ToDouble(obj)));
JsonMapper.RegisterImporter<double, float>(input => Convert.ToSingle(input));
于 2016-10-26T10:19:13.817 回答
3

我想发表评论,但我的声誉 < 50。

我在 Unity3D(脚本语言 Mono C#)中使用 LitJson。在将 json 解析为具有大量浮动成员的对象时,我遇到了同样的问题。我为 LitJson 库添加了浮点支持。如果您仍然需要这个,请告诉我。

于 2014-09-25T10:24:58.610 回答
2

从我在 Github 上的源代码中看到,该库支持 Double 而不是 Single

从他们的库中提取 Jsondata.cs

#region Fields
private IList<JsonData> inst_array;
private bool inst_boolean;
private double inst_double;
private int inst_int;
private long inst_long;
private IDictionary<string, JsonData> inst_object;
private string inst_string;
private string json;
private JsonType type;
于 2014-02-13T00:27:24.920 回答