2016-04-08 9 views
5

seguente è il mio ingresso JSON da Ui:Ricezione oggetto deserializzare JSON come stringa nel controllore API Web

{ 
    "data": [{ 
     "Id": 1 
    }, { 
     "Id": 2 
    }, { 
     "Id": 3 
    }] 
} 

posso riceverlo senza un problema nella struttura dell'oggetto mostrato di seguito:

public class TestController : ApiController 
    { 
     /// <summary> 
     /// Http Get call to get the Terminal Business Entity Wrapper 
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 

     [HttpPost] 
     [Route("api/TestJsonInput")] 
     public string TestJsonInput([FromBody] TestInput input) 
     { 
      return JsonConvert.SerializeObject(input.data); 
     }   

     public class TestInput 
     { 
      public List<Info> data { get; set; } 
     } 

     public class Info 
     { 
      public int Id { get; set; } 
     } 

    } 

Tuttavia il mio obiettivo è quello di ricevere nel seguente metodo API:

 [HttpPost] 
     [Route("api/TestJsonInput")] 
     public string TestJsonInput1([FromBody] string input) 
     { 
      return input; 
     } 

Motivo per questo requisito è, ho non utilizzare l'oggetto JSON de-serializzato via Web API, ho solo bisogno di persistere l'effettivo Json nel Database e recuperare e restituire a Ui, che lo analizzerà indietro.

Dato che non sono in grado di ricevere nell'input della stringa come suggerito, quindi devo eseguire un ulteriore passaggio della serializzazione Json, de-serializzazione per raggiungere l'obiettivo. Qualsiasi meccanismo per me per evitare questa soluzione alternativa ricevendo in una stringa e utilizzandolo direttamente. Attualmente sto testando con Postman

risposta

5

Puoi leggere il contenuto del corpo direttamente come una stringa indipendentemente da ciò che hai inserito nei parametri del tuo metodo. In realtà non è necessario inserire nulla nei parametri e si può ancora leggere il corpo.

[HttpPost] 
[Route("api/TestJsonInput")] 
public string TestJsonInput1() 
{ 
    string JsonContent = Request.Content.ReadAsStringAsync().Result; 
    return JsonContent; 
} 

Non è necessario leggere l'input come parametro.

+0

Che dire di avere più input di stringa, presumo che questa sarebbe una singola stringa Json, che deve essere analizzata –

+0

Anche io non lo sto avendo in Body ora, quindi come posso testare lo stesso da Postman, dove fa il l'input va in questo caso –

+0

Funziona per me nel contesto attuale, grazie kudos :) –