2017-12-13 1 views
0

Ich entwickle geruhsamen Web-Service mit vb.net web api 2, ich versuche Parameter aus dem Körper zu passieren meine gespeicherte Prozedur auszuführen,convert Objekt json in vb .net oder C# .net

{ 
    "id": "2016", 
    "Type":"1", 
    "Year": "1" 
} 

hier die Daten ich bin aus dem Körper vorbei, und hier ist Fehler

{ „message“: „System.InvalidCastException: Konvertierung vom Typ ‚JObject‘‚String‘zu geben ist nicht gültig . \ r \ n um Microsoft.VisualBasic.CompilerServices.Conversions.ToString (Objekt Wert) \ r \ n bei WebApplication7.Controllers.SubjectsController.getSubjects (Object Daten) in C: \ Benutzer \ Junaida \ Dokumente Visual Studio 2015 \ Projects \ \ WebApplication7 \ WebApplication7 \ Controllers \ SubjectsController.vb: line 30" }

mein vb Code:

<HttpPost> 
    Function getSubjects(<FromBody> ByVal data As Object) As IHttpActionResult 
     Try 
      Using entities As IAPD_DBEntities = New IAPD_DBEntities() 

       Dim year, type, id As String 
       Dim dictionary = JsonConvert.DeserializeObject(data) 'As Dictionary(Of String, String) 


       Dim startno As Integer = 0 
       If year = 1 Then 
        startno = 0 
       ElseIf year = 2 And type = 1 Then 
        startno = 366 
       ElseIf year = 2 And type = 3 Then 
        startno = 52 
       ElseIf year = 2 And type = 2 Then 
        startno = 13 
       End If 

       dictionary.Add("id", id) 
       dictionary.Add("Type", type) 
       dictionary.Add("Year", year) 

       Return Ok(entities.SP_Messages_GetinfoArchive_ByID(startno, id, type, year).ToList) 
      End Using 
     Catch e As Exception 
      Return BadRequest(e.ToString) 
     End Try 
    End Function 
End Class 

Antwort

0

Sie müssen eine Klasse mit Eigenschaften erstellen, die den Feldern der eingehenden JSON-Struktur entsprechen, und dann wird die MVC-Web-API die Analyse für Sie durchführen! Keine Notwendigkeit, sich selbst zu deserialisieren.

Beispiel Klasse:

Public Class SubjectParams 
    Public Property id As String 
    Public Property type As String 
    Public Property year As String 
End Class 

Und es dann wie folgt verwenden:

<HttpPost> 
Function getSubjects(<FromBody> ByVal data As SubjectParams) As IHttpActionResult 

Sie können dann data.id, verwenden data.type usw.

Wenn Sie die Eigenschaften müssen andere sein Typen, mach es einfach so (besonders Integer scheint zumindest für einige Eigenschaften Sinn zu ergeben).

+0

https://Stackoverflow.com/users/1220550/peter-b danke, habe ich bereits übergeben Parameter des Typs JObject und erstellt drei Variablen vom Typ JValue und geben sie den Wert von data.gettoken ("id"), und es hat funktioniert –

0

ich denke, Ihr data Objekt ein bereits JObject und JsonConvert.DeserializeObject ist eine Zeichenfolge erwartet. Sie sollten seine Eigenschaften zugreifen, ohne Deserialisieren es in der Lage sein, wie folgt aus:

dictionary.add("id", data("id").ToString()) 
dictionary.add("Type", data("Type").ToString()) 
dictionary.add("Year", data("Year").ToString()) 

Es sollte funktionieren.