使用newton json从c#中反序列化的json中转换错误

时间:2015-05-27 09:10:39

标签: c# json serialization casting json.net

无法从反序列化的json(字典对象)

转换为int

以下是代码:

假设你有字典对象。

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

现在我序列化&amp;反序列化。

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您的号码被序列化为长号(Int64)。试试这个:

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

您必须首先取消长整理,然后在取消装箱后将其转换为int。如果将上述内容转换为单独的语句,则更有意义:

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

答案 2 :(得分:1)

因为deserializedData["key"]的类型是Int64(您在调试时会看到)。您无法将Int64投放到intInt32)。

你能做什么:

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