我一直在努力找出如何扩展通用方法
Newtonsoft.Json.JsonConvert.DeserializeObject(Of T)(value As String)
我正在尝试编写一个扩展,如果反序列化失败,它将返回Nothing
。理想情况下:
JsonConvert.TryDeserializeObject(Of T)(value As String)
我猜您的扩展并不是指实际的Extension
,而是指扩展Newtonsoft.JsonConvert
的一种方式。
- 实际的扩展需要一个实例对象。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)