我一直在敲打我試圖找出如何擴展通用方法擴展DeserializeObject在Json.NET成嘗試方法
Newtonsoft.Json.JsonConvert.DeserializeObject(Of T)(value As String)
我試圖寫一個擴展,將返回Nothing
如果反序列化失敗。理想的情況是:
JsonConvert.TryDeserializeObject(Of T)(value As String)
我一直在敲打我試圖找出如何擴展通用方法擴展DeserializeObject在Json.NET成嘗試方法
Newtonsoft.Json.JsonConvert.DeserializeObject(Of T)(value As String)
我試圖寫一個擴展,將返回Nothing
如果反序列化失敗。理想的情況是:
JsonConvert.TryDeserializeObject(Of T)(value As String)
我猜測,推而廣之,你並不意味着實際Extension
,而是一種擴展Newtonsoft.JsonConvert
。
最接近的將是一個字符串擴展方法:
<Extension>
Public Function JsonTryDeserialize(Of T)(json As String) As T
Dim obj As T
Try
obj = JsonConvert.DeserializeObject(Of T)(json)
Catch ex As Exception
Return Nothing
End Try
Return CType(obj, T)
End Function
用法:
Dim jstr As String = ...json string from somewhere
Dim myFoo = jstr.JsonTryDeserialize(Of Foo)()
就個人而言,我認爲最佳地方,它是在你的工作類型作爲共享功能;它更適用,符合其他的Json方法的代碼更簡單,Intellisence不凌亂:
Class Foo
... stuff
Public Shared Function JsonTryDeserialize(json As String) As Foo
Dim f As Foo
Try
f = JsonConvert.DeserializeObject(Of Foo)(json)
Catch ex As Exception
Return Nothing
End Try
Return f
End Function
End Class
用法:
newFoo = Foo.JsonTryDeserialize(strJ)
,你已經嘗試土族多遠代碼...? – Jeremy 2015-02-10 17:46:10
擴展方法適用於類實例,所以這是不可能的。你必須創建你自己的'JsonHelpers'類或類似的東西。 – 2015-02-10 17:50:11