![](/img/trans.png)
[英]c# With Unity and LitJSON Getting an Invalid Cast Exception when trying to de-serialize back from JSONData object
[英]Why am I getting a strange exception when I try to de-serialize a FormFile object in .NET Core?
我有一個 MVC .NET Core Web 應用程序,在一個控制器方法中,我正在序列化一個名為“file”的 FormFile 對象,如下所示:
var serializedFile = JsonConvert.SerializeObject(file, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
NullValueHandling = NullValueHandling.Ignore,
});
然后在同一個控制器方法中,我將此序列化變量存儲在 TempData 中,如下所示:
TempData["myFile"] = serializedFile ;
然后在另一個控制器方法中,我試圖反序列化這個對象,如下所示:
var deserializedFile = JsonConvert.DeserializeObject<FormFile>(TempData["myFile"].ToString(),
new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
NullValueHandling = NullValueHandling.Ignore,
});
但是當我這樣做時,我拋出了這個異常:Newtonsoft.Json.JsonSerializationException: 'Microsoft.AspNetCore.Http.FormFile'上的'錯誤設置值到'ContentDisposition'。' 內部異常 NullReferenceException:未將對象引用設置為對象的實例。
我已經嘗試了很長時間且令人沮喪,但我一直無法弄清楚為什么會發生這種情況。 任何幫助,將不勝感激? 謝謝!
您必須修復臨時數據名稱
TempData["myFile"] = serializedFile ;
// and
TempData["theFile"].ToString(),
您應該只選擇一個 - “myFile”或“theFile”
為了防止異常,最好使用這種語法
if (TempData.ContainsKey("myFile"))
{
.....
}
TempData 默認容量很小,因為它被保存為cookies。它的大小小於4kb。 您可以獲得數據的原因之一可能是這個。 您必須配置會話以允許保留更多數據。
另一個原因是 TempData 在第一次讀取后清除。 因此,如果您之前使用過它,它也可以為 null。 要保留數據,您必須使用 Keep 或 Peak 關鍵字閱讀。 它不會永遠保留數據,而只會在 2 個請求之間保留數據。 此數據也消失后。
或者,您可以使用 Session 而不是 TempData,但它會降低應用程序的可伸縮性,因為它必須為每個連接的用戶創建一個 Session 對象,並且每個對象都需要一些服務器資源內存或硬盤驅動器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.