Search code examples
c#classarraylistasp.net-web-apijson-deserialization

WebApi Newtonsoft.Json.JsonConvert.DeserializeObject <Class> Error


I am doing a WebApi Method in Visual Studio 2013 and I want to Deserialize a Class Type. My Class is like this

[JsonObject]
    class JOTA
    {
        [JsonProperty("ProductId")]
        public int ProductId { get; set; }
        [JsonProperty("Name")]
        public string Name { get; set; }
    }

My call is like this.

 public void ReturnListProd(JOTA PP)
 {
 JOTA product = Newtonsoft.Json.JsonConvert.DeserializeObject<JOTA>(PP);
 }

I have a compile error

'Network.Json.Json.Converter[] has some invalid argument'

But, if a define an ArrayList

public void ReturnListProd(ArrayList PP)
{
JOTA product = Newtonsoft.Json.JsonConvert.DeserializeObject<JOTA>(PP[0].ToString());
}

I have no error. But in this case, it does not help on what I need.

What I am missing? Thanks


Solution

  • You don't need the attributes if the property names are not different.

    public class JOTA
    {
        public int ProductId { get; set; }
        public string Name { get; set; }
    }
    
    public void ReturnListProd(JOTA PP)
    {
       var product = PP; //not really needed you can just use PP directly
    }
    

    You only need to deserialize if you are receiving a json string. Because you are using WebAPI I would suggest changing your API endpoint to a proper REST endpoint. Example:

    [HttpPost, Route("api/products/add")]
    public IHttpActionResult ReturnListProd([FromBody]JOTA PP)
    {
        try
        {
            //do something with passed in data
            var name = PP.Name;
    
            //always at minimum return a status code
            return Ok();
        }
        catch
        {
            //returns 500
            return InternalServerError();
        }
    }
    

    Then change your ajax url from: url: "yourController/ReturnListProd" to: url: "/api/products/add"