簡介:本人在開發webapi介面時遇到了:一個複雜的Json字串在反序列化為物件時報,無法發序列化其中的一個屬性物件?
使用方法:
InternalRecommendRequestFormModel formData = Newtonsoft.Json.JsonConvert.DeserializeObject<internalrecommendrequestformmodel>(dataInput);</internalrecommendrequestformmodel>
#其中:InternalRecommendRequestFormModel是一個複雜的對象,屬性中又包含其他物件和屬性。 dataInput是介面傳入的JSON字串,它是另一個介面返回的InternalRecommendRequestFormModel對象,當然資料在傳遞的過程中一些屬性發生了變化,按理應該可以正常反序列化,但是在使用的時候卻在反序列化是報錯,無法發序列化其中一個屬性。
那麼我們遇到這種複雜的反序列化成物件時該怎麼辦?
首先:分析知道,報錯是由於個別屬性發序列化失敗導致,那麼只要可以將這部分屬性清空或移除該屬性的序列化內容,就可以了。
那麼:如何在序列化的JSON字串移除掉一部分屬性呢?
我們首先想到的是,字串的替換,清空,截取等等,但想想容易出錯。能不能現將這個字串變成一個可操作的物件(當然不是InternalRecommendRequestFormModel),然後乾掉或清空某個物件後再轉換成我們想要的物件? 其實我一開想想到object,不是任意物件都是object嗎?
開始嘗試:
object formData = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(dataInput);</object>
得到物件如下:
在偵錯中發現:
((Newtonsoft.Json.Linq.JObject)(JsonConvert.DeserializeObject
也就是說,透過上述程式碼可以看出,反序列化的object物件被轉換為了:Newtonsoft.Json.Linq.JObject 對象, 這個物件就是微軟提供給我們的JSON物件的一個基底類別,也就是說,只要你是一個對象,如果被json序列化後,它就可以幫你反序列化回來。
程式碼改進為:
InternalRecommendRequestFormModel formData = new InternalRecommendRequestFormModel();Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<newtonsoft.json.linq.jobject>(dataInput); obj.Remove("opinions"); formData = obj.ToObject<internalrecommendrequestformmodel>();</internalrecommendrequestformmodel></newtonsoft.json.linq.jobject>
#總結:
##只要JSON字串是一個對象,當我們直接反序列化遇到,字串中的部分屬性值不符合要求時,我們可以先將對象轉為:JObject,對對象屬性修正後,再使用JObject提供的ToObject< ;T>()再轉為需要轉換的物件
<strong><span style="font-size: 15px">Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<newtonsoft.json.linq.jobject>(dataInput);</newtonsoft.json.linq.jobject></span></strong><br>
以上是屬性值反序列化失敗怎麼解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

C#.NET應用的測試策略包括單元測試、集成測試和端到端測試。 1.單元測試確保代碼的最小單元獨立工作,使用MSTest、NUnit或xUnit框架。 2.集成測試驗證多個單元組合的功能,常用模擬數據和外部服務。 3.端到端測試模擬用戶完整操作流程,通常使用Selenium進行自動化測試。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)