2015-10-30 37 views
0

我正在做一個Visual Studio 2013中的WebApi方法,我想反序列化一個類類型。我的班級是這樣的WebApi Newtonsoft.Json.JsonConvert.DeserializeObject <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()); 
} 

我沒有任何錯誤。但在這種情況下,它對我所需要的沒有幫助。

我缺少什麼? 感謝

+1

第一個例子沒有按」沒有意義,爲什麼你想要一個'JOTA'對象(不是序列化版本)並將其反序列化爲一個JOTA對象?在這種情況下,你的方法體就是'JOTA product = PP';另外,爲什麼你的方法返回'void',你只是扔掉結果?第二個例子不是編譯時錯誤,但我打賭它是一個運行時錯誤。 –

+1

'DeserializeObject'方法將一個'string'作爲參數,但是你給它一個'JOTA'對象。錯誤告訴你到底是什麼問題。 – DavidG

回答

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網址 「yourController/ReturnListProd」 到: URL: 「/ API /產品/加」

+0

謝謝...我想我需要Deserealize,因爲我將它作爲客戶端的參數傳遞。有用...!! – Diego

+0

沒問題。 webApi的好處之一就是它爲你處理序列化。既然你使用的是webApi,我會用一些建議來更新我的答案。 –

3

如果你想有一個JOTA對象成爲自身(序列化)的字符串表示,那麼你應該使用

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

如果你希望字符串成爲JOTA對象,那麼你正在使用

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

問題是您試圖反序列化未序列化的對象(已經反序列化)。