2015-10-27 42 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 
相关问题