2015-10-27 46 views
1

我有以下JSON無法反序列化當前JSON對象(例如{「名稱」:「值」})成型「System.Collections.Generic.IList

{ 
"response": { 
    "feedMessageResponse": { 
    "count": 1, 
    "feed": { 
     "id": "0nOCG6C0TBCMWdT0YPQYm4n8zxxxxgDQ", 
     "name": "Nav1", 
     "description": "Nav 1", 
     "status": "ACTIVE", 
     "usage": 0, 
     "daysRange": 7, 
     "detailedMessageShown": true 
    }, 
    "totalCount": 1, 
    "activityCount": 0, 
    "messages": { 
     "message": { 
      "@clientUnixTime": "0", 
      "id": 464064302, 
      "messengerId": "0-8061742", 
      "messengerName": "Navigator1", 
      "unixTime": 1445904943, 
      "messageType": "OK", 
      "latitude": -39.1234, 
      "longitude": 140.1234, 
      "modelId": "SPOT2", 
      "showCustomMsg": "Y", 
      "dateTime": "2015-10-27T00:15:43+0000", 
      "batteryState": "GOOD", 
      "hidden": 0, 
      "messageContent": "We have reached this place safely." 
     } 
    } 
    } 
} 
} 

有屬性的堆,但是當只有1個response.feedMessageResponse.messages.message我得到一個反序列化錯誤,指出:

不能反序列化JSON當前對象(例如{「名」:「值」}) 進型 「System.Collections中.Generic.IList`1 [ITBeyond.Mapping.Tracking + SpotMessenger + Message]' ,因爲該類型需要JSON數組(例如[1,2,3])正確地反序列化 。要解決這個錯誤,可以將JSON更改爲JSON數組(例如[1,2,3]),或者更改反序列化類型,使其成爲正常的 .NET類型(例如,不是像integer這樣的基本類型,也不是集合 類型類似於數組或列表),可以從JSON 對象反序列化。 JsonObjectAttribute也可以添加到類型中,以強制它從一個JSON對象反序列化。路徑 'response.feedMessageResponse.messages.message。@ clientUnixTime',線 1,位置287.

如果有不止一個消息,它工作正常。解決此錯誤的兩個屬性被定義爲:

Public Class Messages 
      <JsonProperty("message")> _ 
      Public Property Message() As IList(Of Message) 
       Get 
        Return m_Message 
       End Get 
       Set(value As IList(Of Message)) 
        m_Message = value 
       End Set 
      End Property 
      Private m_Message As IList(Of Message) 
     End Class 

     Public Class Message 
      <JsonProperty("@clientUnixTime")> _ 
      Public Property ClientUnixTime() As String 
       Get 
        Return m_ClientUnixTime 
       End Get 
       Set(value As String) 
        m_ClientUnixTime = value 
       End Set 
      End Property 
     Private m_ClientUnixTime As String 

我已經花了年齡在尋找這一點,不知道是否有與@一個問題。我也嘗試改變到一個消息數組,但得到了類似的錯誤。有任何想法嗎。

當有多於一個是這樣的 - 它進入消息數組:

{"response":{"feedMessageResponse":{"count":50,"feed":{"id":"065QbDkxboXg22n86GUPEQeuauruGOYBi","name":"SPOT XML","description":"SPOT XML","status":"ACTIVE","usage":0,"daysRange":7,"detailedMessageShown":true},"totalCount":182,"activityCount":0,"messages":{"message":[{"@clientUnixTime":"0","id":464123101,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445922060,"messageType":"UNLIMITED-TRACK","latitude":-35.19292,"longitude":149.03433,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T05:01:00+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464122174,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445921763,"messageType":"UNLIMITED-TRACK","latitude":-35.19292,"longitude":149.0343,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T04:56:03+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464121461,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445921495,"messageType":"UNLIMITED-TRACK","latitude":-35.19289,"longitude":149.0343,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T04:51:35+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464120694,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445921168,"messageType":"UNLIMITED-TRACK","latitude":-35.19308,"longitude":149.03423,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T04:46:08+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464115761,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445919383,"messageType":"UNLIMITED-TRACK","latitude":-35.19321,"longitude":149.03415,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T04:16:23+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464115023,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445919086,"messageType":"UNLIMITED-TRACK","latitude":-35.19305,"longitude":149.03415,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T04:11:26+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464114294,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445918788,"messageType":"UNLIMITED-TRACK","latitude":-35.19316,"longitude":149.03424,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T04:06:28+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464113424,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445918490,"messageType":"UNLIMITED-TRACK","latitude":-35.1931,"longitude":149.03429,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T04:01:30+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464112469,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445918192,"messageType":"UNLIMITED-TRACK","latitude":-35.19315,"longitude":149.03419,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:56:32+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464111792,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445917972,"messageType":"UNLIMITED-TRACK","latitude":-35.19928,"longitude":149.0296,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:52:52+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464110787,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445917597,"messageType":"UNLIMITED-TRACK","latitude":-35.24193,"longitude":149.02847,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:46:37+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464109932,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445917299,"messageType":"UNLIMITED-TRACK","latitude":-35.27621,"longitude":149.0704,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:41:39+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464109006,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445917001,"messageType":"UNLIMITED-TRACK","latitude":-35.33484,"longitude":149.06393,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:36:41+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464108035,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445916704,"messageType":"UNLIMITED-TRACK","latitude":-35.38843,"longitude":149.06499,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:31:44+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464107372,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445916504,"messageType":"UNLIMITED-TRACK","latitude":-35.41505,"longitude":149.07426,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:28:24+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464106371,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445916108,"messageType":"UNLIMITED-TRACK","latitude":-35.43842,"longitude":149.12648,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:21:48+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464105481,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445915810,"messageType":"UNLIMITED-TRACK","latitude":-35.50751,"longitude":149.15002,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:16:50+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464105500,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445915510,"messageType":"UNLIMITED-TRACK","latitude":-35.57841,"longitude":149.13551,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:11:50+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464105501,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445915210,"messageType":"UNLIMITED-TRACK","latitude":-35.64789,"longitude":149.16358,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T03:06:50+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464101543,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445914618,"messageType":"UNLIMITED-TRACK","latitude":-35.79567,"longitude":149.164,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:56:58+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464100848,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445914356,"messageType":"UNLIMITED-TRACK","latitude":-35.85545,"longitude":149.159,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:52:36+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464099729,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445914020,"messageType":"UNLIMITED-TRACK","latitude":-35.93443,"longitude":149.14832,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:47:00+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464098656,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445913720,"messageType":"UNLIMITED-TRACK","latitude":-35.99512,"longitude":149.14024,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:42:00+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464097685,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445913420,"messageType":"UNLIMITED-TRACK","latitude":-36.06444,"longitude":149.15785,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:37:00+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464096538,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445913120,"messageType":"UNLIMITED-TRACK","latitude":-36.13341,"longitude":149.14516,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:32:00+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464095566,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445912820,"messageType":"UNLIMITED-TRACK","latitude":-36.20546,"longitude":149.15779,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:27:00+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464094635,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445912523,"messageType":"UNLIMITED-TRACK","latitude":-36.2339,"longitude":149.12524,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T02:22:03+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464088627,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445910814,"messageType":"UNLIMITED-TRACK","latitude":-36.2343,"longitude":149.125,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:53:34+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464087388,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445910496,"messageType":"UNLIMITED-TRACK","latitude":-36.23421,"longitude":149.12494,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:48:16+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464086179,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445910198,"messageType":"UNLIMITED-TRACK","latitude":-36.23412,"longitude":149.12503,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:43:18+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464085139,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445909900,"messageType":"UNLIMITED-TRACK","latitude":-36.23065,"longitude":149.13393,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:38:20+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464084097,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445909603,"messageType":"UNLIMITED-TRACK","latitude":-36.20473,"longitude":149.18015,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:33:23+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464083098,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445909306,"messageType":"UNLIMITED-TRACK","latitude":-36.19275,"longitude":149.26016,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:28:26+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464082096,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445909008,"messageType":"UNLIMITED-TRACK","latitude":-36.17796,"longitude":149.33478,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:23:28+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464080863,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445908711,"messageType":"UNLIMITED-TRACK","latitude":-36.16394,"longitude":149.38853,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:18:31+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464078674,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445908116,"messageType":"UNLIMITED-TRACK","latitude":-36.22205,"longitude":149.453,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:08:36+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464077782,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445907875,"messageType":"UNLIMITED-TRACK","latitude":-36.25075,"longitude":149.46568,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T01:04:35+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464076447,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445907521,"messageType":"UNLIMITED-TRACK","latitude":-36.29175,"longitude":149.49706,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T00:58:41+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464074638,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445907066,"messageType":"UNLIMITED-TRACK","latitude":-36.31458,"longitude":149.51871,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T00:51:06+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464072740,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445906629,"messageType":"UNLIMITED-TRACK","latitude":-36.30792,"longitude":149.53412,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T00:43:49+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464072770,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445906329,"messageType":"UNLIMITED-TRACK","latitude":-36.29522,"longitude":149.54717,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T00:38:49+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464072771,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445906029,"messageType":"UNLIMITED-TRACK","latitude":-36.28672,"longitude":149.56039,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T00:33:49+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464069450,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445905738,"messageType":"UNLIMITED-TRACK","latitude":-36.28976,"longitude":149.57068,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-27T00:28:58+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464060210,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445903953,"messageType":"UNLIMITED-TRACK","latitude":-36.26187,"longitude":149.65543,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-26T23:59:13+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":464059043,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445903656,"messageType":"UNLIMITED-TRACK","latitude":-36.2618,"longitude":149.65604,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-26T23:54:16+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":463751797,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445837736,"messageType":"UNLIMITED-TRACK","latitude":-36.2618,"longitude":149.65614,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-26T05:35:36+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":463751009,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445837439,"messageType":"UNLIMITED-TRACK","latitude":-36.26195,"longitude":149.65622,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-26T05:30:39+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":463751022,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445837139,"messageType":"UNLIMITED-TRACK","latitude":-36.26195,"longitude":149.65622,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-26T05:25:39+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":463751023,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445836839,"messageType":"UNLIMITED-TRACK","latitude":-36.26174,"longitude":149.65571,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-26T05:20:39+0000","batteryState":"GOOD","hidden":0},{"@clientUnixTime":"0","id":463743223,"messengerId":"0-2427832","messengerName":"CSGen3 No1","unixTime":1445834462,"messageType":"UNLIMITED-TRACK","latitude":-36.26802,"longitude":149.75372,"modelId":"SPOT3","showCustomMsg":"Y","dateTime":"2015-10-26T04:41:02+0000","batteryState":"GOOD","hidden":0}]}}}} 
+0

廠對我來說很好 –

+0

'messages'對象中只有一個'message'對象。當有多條消息時,JSON的外觀如何? – dbc

+0

請參閱:[如何使用JSON.net處理同一個屬性的單個項目和數組](https://stackoverflow.com/questions/18994685/how-to-handle-both-a-single-item -and-一個陣列換的使用,同財產-JSON-N)。甚至還包括一個VB.NET答案。 – dbc

回答

0

由DBC提供的鏈接提供了答案。我只好所以這裏VB.NET代碼轉換後的代碼,並回答:

將郵件轉換爲使用自定義JsonConverter

 Public Class Messages 
      <JsonProperty("message")> 
      <JsonConverter(GetType(SingleOrArrayConverter(Of Message)))> 
      Public Property Message() As IList(Of Message) 
       Get 
        Return m_Message 
       End Get 
       Set(value As IList(Of Message)) 
        m_Message = value 
       End Set 
      End Property 
      Private m_Message As IList(Of Message) 
     End Class 

落實SingleOrArrayConverter(VB版)

 Class SingleOrArrayConverter(Of T) 
      Inherits JsonConverter 
      Public Overrides Function CanConvert(objectType As Type) As Boolean 
       Return (objectType = GetType(List(Of T))) 
      End Function 

      Public Overrides Function ReadJson(reader As JsonReader, objectType As Type, existingValue As Object, serializer As JsonSerializer) As Object 
       Dim token As JToken = JToken.Load(reader) 
       If token.Type = JTokenType.Array Then 
        Return token.ToObject(Of List(Of T))() 
       End If 
       Return New List(Of T)() From { 
        token.ToObject(Of T)() 
       } 
      End Function 

      Public Overrides ReadOnly Property CanWrite() As Boolean 
       Get 
        Return False 
       End Get 
      End Property 

      Public Overrides Sub WriteJson(writer As JsonWriter, value As Object, serializer As JsonSerializer) 
       Throw New NotImplementedException() 
      End Sub 
     End Class 
相關問題