2017-07-14 40 views
-2

我所擁有的是一個JSON格式的REST響應,看起來像這樣:{ "guid": "c75d06a8-a705-48ec-b6b3-9076becf20f4" }反序列化JSON對象轉換類型的System.Guid

當嘗試反序列化這個效應初探字符串轉換類型的對象的System.Guid這樣的:Newtonsoft.Json.JsonConvert.DeserializeObject(response.content, type); ,以下拋出異常:

無法反序列化當前JSON對象(例如{「名稱」:「值」})成型「System.Nullable`1 [的System.Guid]」,因爲類型要求JSON原始值(例如,字符串,數字,布爾值,空值)以正確反序列化。 要修復此錯誤,請將JSON更改爲JSON原始值(例如,字符串,數字,布爾值,空值)或更改反序列化類型,以使其成爲正常的.NET類型(例如,不是像整數這樣的基本類型,也不是集合類型如數組或列表),可以從JSON對象反序列化。 JsonObjectAttribute也可以添加到類型中,以強制它從JSON對象反序列化。 Path'guid',line 1,position 8.

任何幫助表示讚賞!

+3

錯誤告訴你爲什麼它不工作:你試圖反序列化' {「guid」:「guid」}作爲「Guid」。 'Guid'類型沒有'guid'屬性。反序列化對象,然後將'guid'屬性的*值*反序列化爲'Guid'。 –

+1

您可以從字符串值創建新的GUID,如錯誤指示。當你提取這個字符串時,試試'new Guid(myGuidString)' – Sal

回答

4

如果你不想創建一個類只包含的GUID值,你可以使用一個動態變量:

string json = "{ \"guid\": \"c75d06a8-a705-48ec-b6b3-9076becf20f4\" }"; 
dynamic container = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json); 
Guid guid; 
Guid.TryParse(container.guid.ToString(), out guid); 
Console.WriteLine(guid);  
// c75d06a8-a705-48ec-b6b3-9076becf20f4 
0

自從我做了這種類型的事情之後,有點過了,但我認爲答案出現在您的錯誤消息中。讓它回來作爲字符串。在你的類中覆蓋guid字符串屬性來設置另一個GUID類型的屬性,並在那裏執行你的轉換和錯誤處理。另一種方法是使用構造函數來幫助這裏。希望這給你一個方向。