2017-04-01 119 views
0

我正在使用json.net反序列化WebApi服務中的傳入json。反序列化JSON時出現C#錯誤

var lines = JsonConvert.DeserializeObject<RootObject>(json); 

閱讀其他一些類似的答案後,它仍然拋出這個錯誤:

The best overloaded method match for 'Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(string)' has some invalid arguments 

是在郵差用於後輸入JSON:

{ "data": [ 
{"zipcode":"56033","line1":"610 4TH ST","city":"FROST","state":"MN","cid":"1770"}, 
{"zipcode":"56033","line1":"45375 30TH ST","city":"FROST","state":"MN","cid":"1771"}, 
{"zipcode":"56033","line1":"115 4TH ST","city":"FROST","state":"MN","cid":"1772"} 
]} 

的POCO類使用:http://json2csharp.com創建。

public class Datum 
    { 
    public string zipcode { get; set; } 
    public string line1 { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
    public string cid { get; set; } 
    } 

    public class RootObject 
    { 
    public List<Datum> data { get; set; } 
    } 

這是我看到的時候我調試API:

{{ 
    "data": [ 
    { 
     "zipcode": "56032-0056", 
     "line1": "208 MAIN BOX 56", 
     "city": "FREEBORN", 
     "state": "MN", 
     "cid": "1732" 
    }, 
    { 
     "zipcode": "56033", 
     "line1": "610 4TH ST", 
     "city": "FROST", 
     "state": "MN", 
     "cid": "1770" 
    }, 
    { 
     "zipcode": "56033", 
     "line1": "45375 30TH ST", 
     "city": "FROST", 
     "state": "MN", 
     "cid": "1771" 
    }, 
    { 
     "zipcode": "56033", 
     "line1": "115 4TH ST", 
     "city": "FROST", 
     "state": "MN", 
     "cid": "1772" 
    }, 
    { 
     "zipcode": "56033", 
     "line1": "E 4TH ST", 
     "city": "FROST", 
     "state": "MN", 
     "cid": "1773" 
    } 
    ] 
}} 

不知道爲什麼的WebAPI是增加一個額外的大括號或如何防止它們。

任何人都可以看到我缺少的東西嗎?

+0

什麼是'json'? –

+0

@GillBates JavaScript Object Notation – Sentry

+0

@GillBates Sry,4月1日習慣。 'json'可能是OP寫爲「輸入json」 – Sentry

回答

1

如果你的json變量是一個字符串,它將工作。這是一個.NET Fiddle演示。

+0

json變量來自api: 公開列表 PostAddressesByLine1Batch(字符串鍵,字符串產品,[FromBody]動態數據) –

+0

好吧,@kman給出了關於變量是字符串的建議。當前參數設置爲動態,或者數據通過api作爲空值。 因此,添加var json = data.ToString();然後var行= JsonConvert.DeserializeObject (json);正確的反序列化。 –