簡體   English   中英

使用牛頓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"];

我相信錯誤是JSON.NET假設您提到的數字是long(int64)類型而不是整數(int32),因此當您對對象進行裝箱時,您無法直接將其裝箱到int32,因此您需要進行更改您的代碼

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

您的號碼正在序列化為長整數(Int64)。 嘗試這個:

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

您必須先將長整型拆箱,然后再將其轉換為整數。 如果將以上內容轉換為單獨的語句,則更有意義:

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

因為deserializedData["key"]的類型是Int64 (調試時會看到)。 您不能將Int64intInt32 )。

你可以做什么:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM