2016-06-02 6 views
1

Ich sende diese Art von JSON zu asp.net Web-API-Aktion.Deserialize JSON-Array mit übersprungenen Elementen

{ 
    "keys": { 
    "2a":["C",,,,,"0",,"0"] 
    } 
} 

Diese json ist POST-ed genau so, wie es in Antrag Körper meiner asp.net 4.5 Web api 2 Aktion.

[RoutePrefix("api/TImport")] 
[Authorize] 
public class TImportController : ApiController 
{ 

    [Route("")] 
    [HttpPost] 
    public async Task<TImportResult> Post(TImportParameters parameters) 
    { 
     // parameters.Keys["2a"] got deserialized as array[3] {"C","0","0" } :(( 
     return await new TImport().RunAsync(parameters); 
    } 

Was geschieht, ist, dass die in 2a Anordnung von 3 Elementen anstelle von 8 Elementen mit null oder leeren Elementen 2 bis 6 und 7.

deserialisiert wird

Was kann ich tun, um übersprungene Array-Elemente, wie zu desserialize Standardeinstellungen (Nullen oder leere Strings)?

+1

Welche Bibliothek verwenden Sie zum Deserialisieren? Newtonsoft hat spezielle Funktionen wie nullhandling und missingmemberhandling, kann es wert sein zu überprüfen –

+0

Ich verwende die Standard-Bibliothek, die für die Bindung von Argumenten in asp mvc verwendet wird. Das ist JsonMediaTypeFormatter basierend auf http://json.codeplex.com/ Ich bin sogar nicht in der Lage herauszufinden, dass ein Referenzverhalten für Json oder eine Sache der besonderen Bibliothek ist. – doker

+0

Dies ist die newtonsoft, überprüfen Sie die Eigenschaft NullValueHandling in der JsonSerializer-Klasse können Sie dies auf Include festlegen und versuchen –

Antwort

1

Das ist eine ungültige JSON-Zeichenfolge. Obwohl einige JSON-Parser die schlechte Syntax ignorieren. Und C#/javascript können Sie keine Eigenschaften erstellen, die mit Zahlen beginnen (2a in diesem Fall) [JSON.Net doesn't complain though]. Ein JSON-String sollte key/value s enthalten, getrennt durch Komma (,).