如何从 JSON 转换/转换值

本文关键字:转换 JSON | 更新日期: 2023-09-27 18:31:07

我的背景都是动态语言多年,所以关于静态类型语言如何从JSON获取数据(键/值可以是不同类型的)的推理成为一个真正让我卡住的问题。以下是我拥有的数据示例:

{
    "par": 4,
    "level": [0,1,0,1,1, 0,1,0,1,1, 0,1,0,1,1, 0,1,0,1,1, 0,1,0,1,1]
}

我想把它变成一些局部变量,比如

int par;
List<bool> levelData;

我正在使用 MiniJSON.cs 进行解析,它给了我Dictionary<string, object>,但我无法弄清楚如何从中获取 par 和 level 值并将它们转换为它们实际表示的不同类型。

如何从 JSON 转换/转换值

尝试转换为List<int>的问题在于 MiniJSON 将整数解析为 Int64int是 32 位,因此由于数据丢失,不允许隐式转换。转换为Int64工作列表!

List<Int64> cells = (List<Int64>)data["level"];

您必须提供一个将字典转换为类型化数据结构的"解码器"。这一点尤其明显,因为您使用01来表示布尔值。

假设类SomeClass保存键入的数据。解码器必须执行以下操作:

SomeClass decode(Dictionary<string,object> d) {
    var m = new SomeClass();
    m.par = (int)d["par"];
    m.levelData = ((List)d["level"]).Select(x => (int)x == 0 ? false : true).ToList();
    return m;
}

因此,基本上您必须将(非类型化)对象转换为类型化值,并且必须显式执行此操作。请注意,这里假设您的零和一列表是同质的(即不包含像字符串这样的"奇怪"值,这在动态类型语言中是完全合法的)。