WebApi Newtonsoft.Json.JsonConvert.DeserializeObject <Class> 错误
WebApi Newtonsoft.Json.JsonConvert.DeserializeObject <Class> Error
我在 Visual Studio 2013 年做一个 WebApi 方法,我想反序列化一个 Class 类型。我的Class是这样的
[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());
}
我没有错误。但在这种情况下,它对我需要的东西没有帮助。
我错过了什么?
谢谢
如果你想让一个 JOTA 对象成为它自己的字符串表示(序列化)那么你应该使用
string serialized = Newtonsoft.Json.JsonConvert.SerializeObject(PP);
如果您希望字符串成为 JOTA 对象,那么您正在使用
JOTA product = Newtonsoft.Json.JsonConvert.DeserializeObject<JOTA>(serialized);
问题是您正在尝试反序列化一个未序列化(已经反序列化)的对象。
如果 属性 名称相同,则不需要属性。
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 更改为:
url: "yourController/ReturnListProd"
到:
url: "/api/products/add"
我在 Visual Studio 2013 年做一个 WebApi 方法,我想反序列化一个 Class 类型。我的Class是这样的
[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());
}
我没有错误。但在这种情况下,它对我需要的东西没有帮助。
我错过了什么? 谢谢
如果你想让一个 JOTA 对象成为它自己的字符串表示(序列化)那么你应该使用
string serialized = Newtonsoft.Json.JsonConvert.SerializeObject(PP);
如果您希望字符串成为 JOTA 对象,那么您正在使用
JOTA product = Newtonsoft.Json.JsonConvert.DeserializeObject<JOTA>(serialized);
问题是您正在尝试反序列化一个未序列化(已经反序列化)的对象。
如果 属性 名称相同,则不需要属性。
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 更改为: url: "yourController/ReturnListProd" 到: url: "/api/products/add"