2015-11-19 1 views
0

Lorsque je désérialise/sérialise et que les données sont contractées dans un format json, ma collection d'éléments ne contient pas le support et provoque l'échec de la publication sur l'API Web. Voici le JSON dans le format correct avec crochets []DataContract Json Serializer et parenthèse manquante dans la collection d'articles

{ 
    "basket": { 
     "basket_platform_type": "in_store", 
     "basket_currency": { 
      "currency_id": 2, 
      "currency_code": "ZAR" 
     }, 
     "basket_items": [ 
      { 
       "spaaza_product_id": 18605, 
       "retailer_product_code": "WBGT0234", 
       "retailer_item_code": "line_0", 
       "item_quantity": 3, 
       "item_price": 250 
      } 
     ], 
     "retailer_basket_code": "70401", 
     "basket_total_price": 750 
    }, 
    "entity": { 
     "entity_type": "chain", 
     "entity_id": 1740, 
     "branch_business_owner_code": "501", 
     "branch_business_id": 1341 
    }, 
    "user": { 
     "member_programme": "spaaza", 
     "member_number": "33017307" 
    } 
} 

C'est ce que je reçois, je suis absent les [] à basketitems

{ 
    "basket": { 
     "basket_platform_type": "in_store", 
     "basket_currency": { 
      "currency_id": 2, 
      "currency_code": "ZAR" 
     }, 
     "basket_items": 
      { 
       "spaaza_product_id": 18605, 
       "retailer_product_code": "WBGT0234", 
       "retailer_item_code": "line_0", 
       "item_quantity": 3, 
       "item_price": 250 
      }, 
     "retailer_basket_code": "70401", 
     "basket_total_price": 750 
    }, 
    "entity": { 
     "entity_type": "chain", 
     "entity_id": 1740, 
     "branch_business_owner_code": "501", 
     "branch_business_id": 1341 
    }, 
    "user": { 
     "member_programme": "spaaza", 
     "member_number": "33017307" 
    } 
} 

Voici les classes et les fonctions que je utilise pour la sérialisation.

Namespace Global.MyPrice 

Public Class GetBasketPrice 

    Public Class Entity 
     Public Property entity_type As String 
     Public Property entity_id As Integer 
     Public Property branch_business_owner_code As String 
     Public Property branch_business_id As Integer 
    End Class 

    Public Class User 
     Public Property member_programme As String 
     Public Property member_number As String 
    End Class 

    Public Class Basket_Currency 
     Public Property currency_id As Integer 
     Public Property currency_code As String 
    End Class 

    Public Class Rootobject 
     Public Property basket As Basket 
     Public Property entity As Entity 
     Public Property user As User 
    End Class 

    Public Class Basket_Items 
     Public Property spaaza_product_id As Integer 
     Public Property retailer_product_code As String 
     Public Property retailer_item_code As String 
     Public Property item_quantity As Integer 
     Public Property item_price As Single 
    End Class 

    Public Class Basket 
     Public Property basket_platform_type As String 
     Public Property basket_currency As Basket_Currency 
     Public Property basket_items() As Basket_Items 
     Public Property retailer_basket_code As String 
     Public Property basket_total_price As Single 
    End Class 

End Class 

Fin Namespace

Ceci est la fonction de sérialisation

Dim jsonstring As String 
      Dim stream1 As New MemoryStream() 

      Dim ser As New DataContractJsonSerializer(GetType(MyPrice.GetBasketPrice.Rootobject)) 
      ser.WriteObject(stream1, MyPriceBasket) 

      stream1.Position = 0 

      Dim sr As New StreamReader(stream1) 
      Console.Write("JSON form of Person object: ") 
      jsonstring = sr.ReadToEnd() 

      Console.WriteLine(jsonstring) 
+1

Où est C# ici? Vous utilisez VB –

+0

désolé mon mauvais :) – Etienne

Répondre

0

La valeur de "basket_items" est un tableau JSON, qui est une liste de valeurs entre crochets: [value1, value2, ..., valueN]. Selon le documentation, DataContractJsonSerializer mappe "Collections, dictionnaires et tableaux" à un tableau JSON. Ainsi votre basket_items propriété doit être une collection de quelque sorte, par exemple un List(Of Basket_Items):

Public Class Basket 
    Public Property basket_platform_type As String 
    Public Property basket_currency As Basket_Currency 
    Public Property basket_items As List(Of Basket_Items) 
    Public Property retailer_basket_code As String 
    Public Property basket_total_price As Single 
End Class 

Ou, si vous voulez utiliser un tableau plutôt qu'une liste, votre () est au mauvais endroit. Vous définissez une propriété d'une valeur tableau en VB.NET like this:

Public Property basket_items As Basket_Items() 

Plus here.

+1

Parfait merci. List (Of Basket_Items) a parfaitement fonctionné ... – Etienne