Reputation: 1667
I have a web service in .net but when i excute it with postman I get just a string json.
this my function :
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebApplication2.Models;
namespace WebApplication2.Controllers
{
public class ProduitController : ApiController
{
MyDataBaseContext dbcontext = new MyDataBaseContext();
public IEnumerable<Produit> Get()
{
IList<Produit> produit = null;
using (dbcontext)
{
produit = dbcontext.Produit.Include("Liste produit")
.Select(s => new Produit()
{
IdProduit=s.IdProduit,
NumeroSerie =s.NumeroSerie,
NomProduit=s.NomProduit,
Prix=s.Prix,
Quantite=s.Quantite,
IdModel=s.IdModel,
IdModelNavigation=s.IdModelNavigation
}).ToList<Produit>();
}
return produit;
}
// GET api/<controller>/5
public string Get(int id)
{
var produit = dbcontext.Produit.AsQueryable().
Where(i => i.IdProduit== id).ToList();
if (produit == null)
{
return JsonConvert.SerializeObject("Not found");
}
else
{
return JsonConvert.SerializeObject(produit);
}
}
}
}
this is the Return string json that can't be serializable in my android application:
[
"[{\"IdProduit\":1,\"NumeroSerie\":\"1234579657\",\"NomProduit\":\"Puce BigKing\",\"Prix\":200.0,\"Quantite\":500,\"IdModel\":1,\"IdModelNavigation\":{\"IdModel\":1,\"NomModel\":\"Puces\",\"Produit\":[],\"StockModel\":[]}},{\"IdProduit\":2,\"NumeroSerie\":\"12345687\",\"NomProduit\":\"Puce La Win\",\"Prix\":2000.0,\"Quantite\":60,\"IdModel\":1,\"IdModelNavigation\":{\"IdModel\":1,\"NomModel\":\"Puces\",\"Produit\":[],\"StockModel\":[]}},{\"IdProduit\":3,\"NumeroSerie\":\"124576328\",\"NomProduit\":\"Carte De Recharge 200DA\",\"Prix\":200.0,\"Quantite\":300,\"IdModel\":2,\"IdModelNavigation\":{\"IdModel\":2,\"NomModel\":\"Carte De Recharge\",\"Produit\":[],\"StockModel\":[]}}]"
]
expeted json in this return function must be lik this so this is a json array ofobjr=ect not an array of string for that my app does not serialze it properly;
[
[
{
"IdProduit":1,
"NumeroSerie":"1234579657",
"NomProduit":"Puce BigKing",
"Prix":200.0,
"Quantite":500,
"IdModel":1,
"IdModelNavigation":{
"IdModel":1,
"NomModel":"Puces",
"Produit":[
],
"StockModel":[
]
}
},
{
"IdProduit":2,
"NumeroSerie":"12345687",
"NomProduit":"Puce La Win",
"Prix":2000.0,
"Quantite":60,
"IdModel":1,
"IdModelNavigation":{
"IdModel":1,
"NomModel":"Puces",
"Produit":[
],
"StockModel":[
]
}
}
]
]
Upvotes: 0
Views: 515
Reputation: 142123
Change your return type to IEnumerable<Produit>
:
public IEnumerable<Produit> Get()
{
using (dbcontext)
{
var produit = dbcontext.Produit.Include("Liste produit")
.Select(s => new Produit
{
IdProduit=s.IdProduit,
NumeroSerie =s.NumeroSerie,
NomProduit=s.NomProduit,
Prix=s.Prix,
Quantite=s.Quantite,
IdModel=s.IdModel,
IdModelNavigation=s.IdModelNavigation
}).ToList();
return produit;
}
}
ASP will serialize the result for you, otherwise you will get your result serialized twice.
Currently you serialize your collection into string
with JsonConvert.SerializeObject(produit)
and return IEnumerable<String>
from your controller so you end up with collection of one string
(via yield return
) which is serialized ending up in the result in question.
UPD
To get desired output try this:
public IEnumerable<List<Produit>> Get()
{
using (dbcontext)
{
var produit = dbcontext.Produit.Include("Liste produit")
.Select(s => new Produit
{
IdProduit=s.IdProduit,
NumeroSerie =s.NumeroSerie,
NomProduit=s.NomProduit,
Prix=s.Prix,
Quantite=s.Quantite,
IdModel=s.IdModel,
IdModelNavigation=s.IdModelNavigation
}).ToList();
return new [] { produit };
}
}
Upvotes: 1