2015-11-19 5 views
0

Когда я дезацинирую/сериализую и передаю данные в формате json, в моей коллекции элементов отсутствует скобка, и это приводит к сбою при отправке на веб-api. Вот JSON в правильном формате с [] скобкахDataContract Json Сериализатор и отсутствующий кронштейн в наборе элементов

{ 
    "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" 
    } 
} 

Это то, что я получаю, я пропускаю в [] в 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" 
    } 
} 

Вот классы и функции я использую для сериализации.

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 

End Namespace

Это функция Сериализация

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

Где находится C# здесь ?? Вы используете VB –

+0

извините, мой плохой :) – Etienne

ответ

0

Значение "basket_items" является массив JSON, который представляет собой заключенный в скобки список значений: [value1, value2, ..., valueN]. Согласно картам documentation, DataContractJsonSerializer «Коллекции, словари и массивы» в массив JSON. Таким образом, ваше basket_items свойства должно быть собранием какого-то, например, 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 

Или, если вы хотите использовать массив, а не список, ваш () находится в неправильном месте. Необходимо определить свойство массива многозначных в VB.NET like this:

Public Property basket_items As Basket_Items() 

Больше here.

+1

Отличная благодарность. Список (Of Basket_Items) работал отлично ... – Etienne

 Смежные вопросы

  • Нет связанных вопросов^_^