将 Json.NET 中的 DeserializeObject 扩展为 Try 方法
Extend DeserializeObject in Json.NET into a Try method
我一直在折磨自己试图弄清楚如何扩展泛型方法
Newtonsoft.Json.JsonConvert.DeserializeObject(Of T)(value As String)
我正在尝试编写一个扩展,如果反序列化失败,它将 return Nothing
。理想情况下:
JsonConvert.TryDeserializeObject(Of T)(value As String)
我猜你所说的扩展并不是指实际的 Extension
,而是扩展 Newtonsoft.JsonConvert
的一种方式。
- 实际的扩展需要一个实例对象。 JsonConvert 是一个包含所有 shared/static 成员的类型,因此不会起作用。
- 您也不能通过继承来扩展 class,因为它是密封的 class(不可继承)。
最接近的是字符串扩展方法:
<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 方法匹配代码更简单且智能不混乱:
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)
我一直在折磨自己试图弄清楚如何扩展泛型方法
Newtonsoft.Json.JsonConvert.DeserializeObject(Of T)(value As String)
我正在尝试编写一个扩展,如果反序列化失败,它将 return Nothing
。理想情况下:
JsonConvert.TryDeserializeObject(Of T)(value As String)
我猜你所说的扩展并不是指实际的 Extension
,而是扩展 Newtonsoft.JsonConvert
的一种方式。
- 实际的扩展需要一个实例对象。 JsonConvert 是一个包含所有 shared/static 成员的类型,因此不会起作用。
- 您也不能通过继承来扩展 class,因为它是密封的 class(不可继承)。
最接近的是字符串扩展方法:
<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 方法匹配代码更简单且智能不混乱:
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)