在線json轉cmodel(json格式轉換)

本文目錄一覽:

如何將json轉成對應的model

大部分情況使用json的格式來傳遞參數,但是使用起來就不太方便了,因此需要將json轉換成對應的model,然後對model進行操作就很便利了。json轉model的方法也有很多,推薦一個就是,jackson,方法是這樣的。 public static T obj2Obj(Object fromV…

YYModel的json轉model,model轉json完後調用的方法

//當 JSON 轉為 Model 完成後,該方法會被調用。

// 你可以在這裡對數據進行校驗,如果校驗不通過,可以返回 NO,則該 Model 會被忽略。

// 你也可以在這裡做一些自動轉換不能完成的工作。

// 當 Model 轉為 JSON 完成後,該方法會被調用。

// 你可以在這裡對數據進行校驗,如果校驗不通過,可以返回 NO,則該 Model 會被忽略。

// 你也可以在這裡做一些自動轉換不能完成的工作。

// Model:

//返回一個 Dict,將 Model 屬性名對映射到 JSON 的 Key。

iOS項目中Json轉Model的坑

打開podfile,把大名頂頂的YYModel寫上,pod install一下。再用上ESJsonFormat,直接根據json,都能把model生成好。

啥?返回的欄位值不是我們所需的

在日常開發中,經常會遇到一些介面欄位返回的值,並不是我所需要的類型的情況,這個時候,我們都會對這個欄位進行處理。

舉個栗子:

介面的json中的error_code欄位,介面會用這個欄位告訴我這次請求是否成功。比方說成功的error_code是1,平時我們為了方便開發,會在model里自己加一個自定義的屬性isSuccess,來表示本次網路請求回來之後的結果是否成功。通常的做法,要麼重寫error_code的set方法,在set的時候,做一次error_code==1的判斷,將判斷的結果,賦值給isSuccess,要麼就重寫isSuccess的get方法,get的時候,返回error_code==1的結果。

相信這些對於老司機們而言,都屬於常規操作了。那我們來看看坑在什麼地方?

我們來看這個案例:

介面返回了4個欄位值,每個欄位都用得到,所以新建一個model類來解析。

但是由於有業務需求,且為了方便開發過程區分,需要對考試名稱的欄位examSubjectName為全科或者語數外的情況,要特殊處理。所以,按照一貫的思維,我們要重寫set方法

乍一看,也沒什麼問題,解析的過程中,把欄位的值轉化為我們需要的。 而且真機實測的時候,所有的測試機都沒問題,除了一台iPhone5之外

就除了一台iPhone5,debug的時候看到set方法確實也走了,可是最終的subjectBaseId並沒有轉化成-100或者-200,可見subjectBaseId又被json本身的值覆蓋了,也就是說 set方法的執行順序,在不同CPU架構設備上存在差異。

那麼如何解決問題呢?

正是因為存在這樣的差異,所以我們只能在model所有的欄位全部set完畢之後,再做一些特殊的欄位處理,那麼如何來處理呢?

翻閱YYModel源碼,肯定能有所發現,果不其然,有所收穫。

YYModel提供了這麼個方法,它會在 +modelWithJSON: , +modelWithDictionary: , -modelSetWithJSON: and -modelSetWithDictionary: 方法結束的時候調用。

所以我們對model特殊欄位的處理,都應該放到這個方法去執行

這麼一來,問題就解決了。

注意,YYModel還有一個 – (NSDictionary *)modelCustomWillTransformFromDictionary:(NSDictionary *)dic;

這個方法很類似,但是執行的時機不一樣,這個方法是在model轉化之前執行,雖不符合本案例的需求,但是很有可能在其他類似的情況能用的上。

C#json轉為對象

方法1:

//藉助於Newtonsoft.Json.dll

public static object JsonToObject(string jsonString, object obj)

{

return JavaScriptConvert.DeserializeObject(jsonString, obj.GetType());

}

方法2:

//引用:System.Runtime.Serialization,System.ServiceModel.Web

public static object JsonToObject(string jsonString, object obj)

{

DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());

MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

return serializer.ReadObject(mStream);

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280605.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:04
下一篇 2024-12-21 13:04

相關推薦

  • JSON的MD5

    在Web開發過程中,JSON(JavaScript Object Notation)是最常用的數據格式之一。MD5(Message-Digest Algorithm 5)是一種常用…

    編程 2025-04-29
  • 使用Java將JSON寫入HDFS

    本篇文章將從以下幾個方面詳細闡述Java將JSON寫入HDFS的方法: 一、HDFS簡介 首先,先來了解一下Hadoop分散式文件系統(HDFS)。HDFS是一個可擴展性高的分散式…

    編程 2025-04-29
  • Python在線編輯器的優勢與實現方式

    Python在線編輯器是Python語言愛好者的重要工具之一,它可以讓用戶方便快捷的在線編碼、調試和分享代碼,無需在本地安裝Python環境。本文將從多個方面對Python在線編輯…

    編程 2025-04-28
  • 如何使用Newtonsoft datatable轉Json

    Newtonsoft DataTable 是一個基於.NET的JSON框架,也是一個用於序列化和反序列化JSON的強大工具。 在本文中,我們將學習如何使用Newtonsoft Da…

    編程 2025-04-28
  • JPRC – 輕鬆創建可讀性強的 JSON API

    本文將介紹一個全新的 JSON API 框架 JPRC,通過該框架,您可以輕鬆創建可讀性強的 JSON API,提高您的項目開發效率和代碼可維護性。接下來將從以下幾個方面對 JPR…

    編程 2025-04-27
  • CentOS 7在線安裝MySQL 8

    在本文中,我們將介紹如何在CentOS 7操作系統中在線安裝MySQL 8。我們會從安裝環境的準備開始,到安裝MySQL 8的過程進行詳細的闡述。 一、環境準備 在進行MySQL …

    編程 2025-04-27
  • 使用Python獲取JSON並解析

    本文將介紹如何使用Python獲取JSON數據並解析相關內容。通過使用Python的第三方庫,我們可以輕鬆地處理JSON數據,包括讀取、提取和操作JSON數據。 一、獲取JSON數…

    編程 2025-04-27
  • Python存為JSON的方法及實例

    本文將從以下多個方面對Python存為JSON做詳細的闡述。 一、JSON簡介 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於人閱…

    編程 2025-04-27
  • 使用Spread 8展示JSON數據

    使用Spread 8可以方便地展示JSON數據,本文將詳細介紹如何利用Spread 8展示JSON數據。 一、Spread 8簡介 Spread 8是一款強大的電子表格軟體,可以方…

    編程 2025-04-27
  • 如何在json轉實體類時忽略大小寫

    本文將從以下幾個方面介紹如何在json轉實體類時忽略大小寫。 一、使用Gson庫實現json轉實體類忽略大小寫 Gson是Google提供的Java JSON操作庫,它提供了簡單易…

    編程 2025-04-27

發表回復

登錄後才能評論