使用牛顿 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"]);
无法从反序列化的 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"]);