2017-12-04 4 views
0

Ich verwende die neue REST-Sell-API von eBay, um ein Inventarelement zu erstellen. Ich habe Probleme, Produktaspekte manuell zu erstellen. Ich habe versucht, eine Liste von Name-Wert-Paare zu schaffen, sondern eBay den folgenden Fehler zurückgibt:Aspects-Objekt beim Erstellen von eBay nicht serialisieren API-Inventarelement (.NET) erstellen

Could not serialize field [product.aspects] 

unterhalb der Anfrage Nutzlast Probe von eBay:

{ 
    "availability": { 
     "shipToLocationAvailability": { 
      "quantity": 50 
     } 
    }, 
    "condition": "NEW", 
    "product": { 
     "title": "GoPro Hero4 Helmet Cam", 
     "description": "New GoPro Hero4 Helmet Cam. Unopened box.", 
     "aspects": { 
      "Brand": [ 
       "GoPro" 
      ], 
      "Type": [ 
       "Helmet/Action" 
      ], 
      "Storage Type": [ 
       "Removable" 
      ], 
      "Recording Definition": [ 
       "High Definition" 
      ], 
      "Media Format": [ 
       "Flash Drive (SSD)" 
      ], 
      "Optical Zoom": [ 
       "10x" 
      ] 
     }, 
     "imageUrls": [ 
      "http://i.ebayimg.com/images/i/182196556219-0-1/s-l1000.jpg", 
      "http://i.ebayimg.com/images/i/182196556219-0-1/s-l1001.jpg", 
      "http://i.ebayimg.com/images/i/182196556219-0-1/s-l1002.jpg" 
     ] 
    } 
} 

Soweit ich weiß, Produktaspekte sind nicht behoben und kann alles sein, deswegen kann ich keine Klasse erstellen. Ich bin mir nicht sicher, wie ich damit umgehen soll, abgesehen davon, dass ich den JSON manuell erstellt habe und ihn an der richtigen Stelle in die Anfrage-Payload eingefügt habe.

Gibt es einen besseren Weg, dies zu tun? Vielleicht ein dynamisches Objekt im laufenden Betrieb erstellen (irgendwelche Beispiele würden helfen)?

Antwort

0

Ich habe am Ende erstellt eine Liste eines Aspect-Objekts, mit einer Erweiterungsmethode, um die Liste manuell in JSON konvertieren, die ich deserialize in ein Objekt und übergeben Sie die Anfrage Payload an eBay.

Public Class Aspect 
    Property Name As String 
    Property Values As String() 
End Class 

Public Class RequestPayload 
    <JsonProperty("aspects")> 
    Public Property Aspects As Object 
End Class 

Sub Click() 

    Dim Payload As New RequestPayload 

    Payload.Aspects = (New List(Of Aspect) From { 
          New Aspect With {.Name = "Brand", .Values = {"GoPro"}}, 
          New Aspect With {.Name = "Type", .Values = {"Helmet/Action"}} 
         } 
        ).ToAspectsObject() 

End Sub 

<Extension()> 
Function ToAspectsObject(Source As List(Of Aspect)) As Object 

    Dim Aspects As New List(Of String) 

    For Each Aspect In Source 
     Aspects.Add(String.Format("""{0}"": [{1}]", Aspect.Name, String.Join(", ", Aspect.Values.Select(Function(x) String.Format("""{0}""", x))))) 
    Next 

    Dim JsonObject = String.Format("{{{0}}}", String.Join(", ", Aspects)) 

    Return Json.DeserializeObject(JsonObject) 

End Function 
Verwandte Themen