使用牛顿 json 在 c# 中从反序列化 json 转换错误

Casting error from deserialized json in c# using newton json

无法从反序列化的 json(字典对象)转换为 int

代码如下:

假设您有字典对象。

 Dictionary<string, object> dict = new Dictionary<string, object>();
 dict.Add("key", 1);

现在我对其进行序列化和反序列化。

var serializedData = JsonConvert.SerializeObject(dict);
var deserializedData = JsonConvert.DeserializeObject<Dictionary<string, object>>(serializedData);

当我在运行时执行此操作时出现错误

int value = (int)deserializedData["key"];

您的号码正在序列化为 long (Int64)。试试这个:

int value = (int)(long)deserializedData["key"];

必须先对long型进行拆箱,拆箱后再转为int型。如果将以上内容转换为单独的语句,这会更有意义:

object oValue = deserializedData["key"];
long longValue = (long)oValue;
int value = (int)longValue;

我认为错误是 JSON.NET 假设您提到的数字是 long (int64) 类型而不是 integer (int32) 类型,因此当您对对象进行装箱时,您无法将其拆箱为 int32直接,因此您需要更改代码

 int i = (int)(long) deserializedData["key"];

因为deserializedData["key"]的类型是Int64(你调试的时候就会看到)。您不能将 Int64 转换为 int (Int32) .

你能做什么:

int value = System.Convert.ToInt32(deserializedData["key"]);