【问题标题】:System.Web.Script.Serialization.JavaScriptSerializer Deserialize method throws error on Null valuesSystem.Web.Script.Serialization.JavaScriptSerializer Deserialize 方法在 Null 值上引发错误
【发布时间】:2019-01-15 03:36:10
【问题描述】:

我收到错误“无法将 NULL 转换为值类型”我已经看到了一些关于忽略空值的其他答案,但我似乎无法在 Javascriptserializer 类中找到该属性。 (或 .NET 提供的任何其他序列化类)

我有如下函数,它使用httpwebrequest来检索一个JSON字符串......

  Public Shared Function GetPagerAssignments(Optional ByVal ActiveOnly As Boolean = True) As List(Of PagerAssignment)
    Dim mylist As New List(Of PagerAssignment)

    Dim myrequest As HttpWebRequest = HttpWebRequest.Create("My URL Here")
    myrequest.Proxy = Nothing
    myrequest.UserAgent = "PAGER"
    myrequest.Method = "GET"

    Dim myresponse As HttpWebResponse = myrequest.GetResponse
    Dim mystream As System.IO.Stream = (myresponse.GetResponseStream)

    Dim streamreader As New System.IO.StreamReader(mystream)

    Dim myjsonstring As String = streamreader.ReadToEnd

    Try
        Dim jss = New JavaScriptSerializer()


        mylist = jss.Deserialize(Of List(Of PagerAssignment))(myjsonstring)

    Catch ex As Exception
        MessageBox.Show("ERROR GETTING PAGER ASSIGNMENTS: " & ex.ToString)
    End Try

    Return mylist
end function

我的 JSON 字符串中有一个返回 NULL 值的日期值,但我需要使用它。这是我的 JSON..

[
{
""ID"":""283"",
""FirstName"":""JOHN"",
""LastName"":""DOE"",
""AssignedDate"":{""date"":""2019-01-14 09:35:15.573000"",""timezone_type"":3,""timezone"":""America\/Tegucigalpa""},
""RegisteredDate"":{""date"":""2019-01-14 19:46:43.883000"",""timezone_type"":3,""timezone"":""America\/Tegucigalpa""},
""DoctorID"":""54"",
""RoomNumber"":""999"",
""PagerID"":""14"",
""AssigningUser"":""BILLYBOB"",
""Procedure"":""NONE"",
""Notes"":"""",
""ReturnStatus"":0,
""ReturnedDate"":null,
""IsHeld"":0,
""HasOrientation"":0,
""PagerTypeID"":""1"",
""DoctorName"":""PEPPER, DR"",
""PagerName"":""14"",
""PagerTypeName"":""Family""
},
{""ID"":""297"",
""FirstName"":""BUGS"",
""LastName"":""BUNNY"",
""AssignedDate"":{""date"":""2019-01-14 20:29:17.937000"",""timezone_type"":3,""timezone"":""America\/Tegucigalpa""},
""RegisteredDate"":null,
""DoctorID"":""81"",
""RoomNumber"":""45"",
""PagerID"":""20"",
""AssigningUser"":""HOMER S"",
""Procedure"":""54545"",
""Notes"":"""",
""ReturnStatus"":0,
""ReturnedDate"":null,
""IsHeld"":0,
""HasOrientation"":0,
""PagerTypeID"":""1"",
""DoctorName"":""MONROE, MARVIN"",
""PagerName"":""20"",
""PagerTypeName"":""Family""
},
{""ID"":""295"",
""FirstName"":""DAFFY"",
""LastName"":""DUCK"",
""AssignedDate"":{""date"":""2019-01-14 16:11:06.830000"",""timezone_type"":3,""timezone"":""America\/Tegucigalpa""},
""RegisteredDate"":{""date"":""2019-01-14 19:55:50.290000"",""timezone_type"":3,""timezone"":""America\/Tegucigalpa""},
""DoctorID"":""81"",
""RoomNumber"":""876"",
""PagerID"":""24"",
""AssigningUser"":""BART S"",
""Procedure"":""TEST PROCEDURE"",
""Notes"":"""",
""ReturnStatus"":0,
""ReturnedDate"":null,
""IsHeld"":0,
""HasOrientation"":0,
""MRN"":""8734"",
""PagerTypeID"":""1"",
""DoctorName"":""GOODE, PHIL"",
""PagerName"":""24"",
""PagerTypeName"":""Family""
}

]

【问题讨论】:

    标签: .net json vb.net javascriptserializer


    【解决方案1】:

    根据docs,不建议将此类用于此用途。这是一个使用 Json.Net 的替代实现,假设您的类 PagerAssignment 接受 RecordData 的空值,它应该可以创建。

        Public Function GetPagerAssignments(Optional ByVal ActiveOnly As Boolean = True) As List(Of PagerAssignment)
        Dim mylist As New List(Of PagerAssignment)
    
        Dim myrequest As HttpWebRequest = HttpWebRequest.Create("My URL Here")
        myrequest.Proxy = Nothing
        myrequest.UserAgent = "PAGER"
        myrequest.Method = "GET"
    
        Dim myresponse As HttpWebResponse = myrequest.GetResponse
        Dim mystream As System.IO.Stream = (myresponse.GetResponseStream)
    
        Dim streamreader As New System.IO.StreamReader(mystream)
    
        Dim myjsonstring As String = streamreader.ReadToEnd
    
        Try
            mylist = Newtonsoft.Json.JsonConvert.DeserializeObject(Of List(Of PagerAssignment))(myjsonstring)
    
        Catch ex As Exception
            MessageBox.Show("ERROR GETTING PAGER ASSIGNMENTS: " & ex.ToString)
        End Try
    
        Return mylist
    End Function
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      这是我使用的一些测试代码。它没有抛出您看到的异常:

      Module Module1
      Sub Main()
          Dim json = "[{'Id':1 'RecordDate': null},{'Id':2 'RecordDate': null}]"
          GetPagerAssignments(json)
          Console.Read()
      End Sub
      
      Public Function GetPagerAssignments(dataAsJson As String) As List(Of PagerAssignment)
          Dim mylist As New List(Of PagerAssignment)
      
      
          Try
              Dim jss = New JavaScriptSerializer()
      
      
              mylist = jss.Deserialize(Of List(Of PagerAssignment))(dataAsJson)
      
          Catch ex As Exception
              'MessageBox.Show("ERROR GETTING PAGER ASSIGNMENTS: " & ex.ToString)
          End Try
      
          Return mylist
      End Function
      End Module 
      

      这是我使用的类:

      Friend Class PagerAssignment
         Public Id As Int32
         Public RecordDate As DateTime?
      End Class
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多