2017-05-22 6 views
0

ich eine Liste von Objekten in JSON haben, die nicht von einem WebApi2 ControllerWebAPI nicht json Liste erkennen

Die JSON-Liste wird folgendes erkannt:

{ 
"FirstObjectType": [{"Name": "the_name"}], 
"SecondObjectType": [{"Label": "01_obj"}, {"Label": "02_obj"}] 
} 

Die Modellklasse ist:

public class CompositeObject 
{ 
    [JsonProperty("FirstObjectType")] 
    public List<FirstObject> fo { get; set; } 

    [JsonProperty("SecondObjectType")] 
    public List<SecondObject> so { get; set; } 
} 

Der Controller ist:

public IHttpActionResult PostList([FromBody] CompositeObject jsonList) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    List<FirstObject> fo_list = jsonList.fo; 

    foreach (var item in fo_list) 
    { 
     db.FirstObject.Add(item); 
     db.SaveChanges(); 
    } 

    return StatusCode(HttpStatusCode.OK); 
} 

Wenn ich die Post-Aktion absende, erkennt der Controller beide Listen in CompositeObject jsonList als Null

+1

Ihre JSON ist falsch hier – Marusyk

+0

@MegaTron mein Fehler: ich habe eine andere Lösung

im WebAPI Controller gefunden copy/paste Fehler! – Cyr

+1

Sie müssen auch die Struktur von 'FirstObject' und' SecondObject' anzeigen. –

Antwort

0

In Ihrem Modell gibt es ein Problem, bei dem Namen nicht gefunden werden. Sie haben Modell zu aktualisieren, wie:

public class FirstObjectType 
{ 
    public string Name { get; set; } 
} 

public class SecondObjectType 
{ 
    public string Label { get; set; } 
} 

public class RootObject 
{ 
    public List<FirstObjectType> FirstObjectType { get; set; } 
    public List<SecondObjectType> SecondObjectType { get; set; } 
} 

ich angenommen habe, dass FirstObjectType enthält Zeichenfolge mit dem Namen Name und SecondObjectType enthält Zeichenfolge mit dem Namen Label. Stellen Sie sicher, dass Sie die gleichen Namen für die Eigenschaften FirstObjectType und SecondObjectType class wie in JSON string verwenden.

+1

Sie machen eine Annahme. Das OP hat die tatsächlichen Modellklassen nicht gezeigt. –

+0

zusätzliche Annahme. Danke @DavidL für den Vorschlag! – Umar

+0

Ich nehme meine Json und dein Model, aber es funktioniert nicht! Immer noch ein Nullwert ... – Cyr

0

Das Problem war in der Client-Code, weil ich den Inhaltstyp als application/json im Header-Abschnitt festgelegt haben.
Auf diese Weise des WebAPI Server in der richtigen Weise nicht das JSON-Objekt erkennen (ich glaube, dass der Server Look für einen x-www-form-urlencoded Typen)

also über den Code richtig ist, aber

using Newtonsoft.Json.Linq; 

public IHttpActionResult PostList([FromBody] JObject ReceivedObjectsList) 
{   
    var receivedLists = ReceivedObjectsList.Properties(); 

    List<FirstObject> fo = ReceivedObjectsList["FirstObjectType"].ToObject<List<FirstObject>>(); 
    List<SecondObject> so = ReceivedObjectsList["SecondObjectType"].ToObject<List<SecondObject>>(); 

    ... 
}