屬性值還原序列化失敗怎麼解決?

來源:互聯網
上載者:User
簡介:本人在開發webapi介面時遇到了:一個複雜的Json字串在還原序列化為對象時報,無法發序列化其中的一個屬性對象?

使用方法:

InternalRecommendRequestFormModel formData = Newtonsoft.Json.JsonConvert.DeserializeObject<InternalRecommendRequestFormModel>(dataInput);

其中:InternalRecommendRequestFormModel是一個複雜的對象,屬性中又包含其他對象和屬性。 dataInput是介面傳入的JSON字串,它是另一個介面返回的InternalRecommendRequestFormModel對象,當然資料在傳遞的過程中一些屬性發生了變化,按理應該可以正常還原序列化,但是在使用的時候卻在還原序列化是報錯,無法發序列化其中一個屬性。

那麼我們遇到這種複雜的還原序列化成對象時該怎麼辦?

首先:分析知道,報錯是由於個別屬性發序列化失敗導致,那麼只要可以將這部分屬性清空或者移除該屬性的序列化內容,就可以了。

那麼:如何在序列化的JSON字串移除掉一部分屬性呢?

我們首先想到的是,字串的替換,清空,截取等等,但是想想容易出錯。能不能現將這個字串變成一個可操作的對象(當然不是InternalRecommendRequestFormModel),然後幹掉或者清空某個對象後再轉換成我們想要的對象? 其實我一開想想到object,不是任意對象都是object嗎?

開始嘗試:

object formData = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(dataInput);

得到對象如下:

在調試中發現:

((Newtonsoft.Json.Linq.JObject)(JsonConvert.DeserializeObject<object>(dataInput))).ChildrenTokens[46] ,我是可以拿到屬性值的。

也就是說,通過上述代碼可以看出,還原序列化的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>();

總結:

只要JSON字串是一個對象,當我們直接還原序列化遇到,字串中的部分屬性值不符合要求時,我們可以先將對象轉為:JObject,對對象屬性修正後,再使用JObject提供的ToObject<T>()再轉為需要轉換的對象

Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(dataInput);
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.