WebApi Newtonsoft.Json.JsonConvert.DeserializeObject <class>错误

时间:2015-10-30 15:03:33

标签: c# class arraylist asp.net-web-api json-deserialization

我正在Visual Studio 2013中执行WebApi方法,我想反序列化类类型。我的班级就像这样

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

我的电话是这样的。

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

我有编译错误

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

但是,如果定义一个ArrayList

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

我没有错误。但在这种情况下,它对我所需要的东西没有帮助。

我缺少什么? 感谢

2 个答案:

答案 0 :(得分:3)

如果你想让一个JOTA对象成为它自己的字符串表示形式(序列化它)那么你应该使用

string serialized = Newtonsoft.Json.JsonConvert.SerializeObject(PP);

如果您希望字符串成为JOTA对象,那么您正在使用

JOTA product = Newtonsoft.Json.JsonConvert.DeserializeObject<JOTA>(serialized);

问题是您正在尝试反序列化未序列化的对象(已经反序列化)。

答案 1 :(得分:1)

如果属性名称没有不同,则您不需要这些属性。

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
}

如果您收到json字符串,则只需要反序列化。因为您使用的是WebAPI,我建议您将API端点更改为正确的REST端点。示例:

[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();
    }
}

然后从以下位置更改您的ajax网址: url:&#34; yourController / ReturnListProd&#34; 至: 网址:&#34; / api / products / add&#34;