将Json.NET中的DeserializeObject扩展为Try方法



我一直在努力找出如何扩展通用方法

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)

相关内容

  • 没有找到相关文章

最新更新