2017-08-16 21 views
2

我JSON如下,無法將類型 'Newtonsoft.Json.Linq.JObject' 到複雜類型

{ 
    "H": "Macellum", 
    "M": "Receive", 
    "A": [ 
    { 
     "CustomerId": "172600", 
     "OrderId": "69931", 
     "OrderStatus": "E0", 
     "Buy": "A" 
    } 
    ] 
} 

和複合型

public class OrderStats 
{ 
    public string CustomerId { get; set; } 
    public string OrderId { get; set; } 
    public string OrderStatus { get; set; } 
    public string Buy { get; set; } 
} 

我試圖鑄造如下,

dynamic obj = JsonConvert.DeserializeObject<dynamic>(message); 
OrderStats info = (OrderStats)obj.A[0]; //exception 
OrderStats info = obj.A[0] as OrderStats; //info is null 

但錯誤如下

Cannot convert type 'Newtonsoft.Json.Linq.JObject' to OrderStatus

回答

6

這個怎麼樣?

var str = "YOUR_JSON_HERE"; 
var obj = JsonConvert.DeserializeObject<dynamic>(str); 
OrderStats info = ((JArray)obj.A)[0].ToObject<OrderStats>(); 
+0

請注意,有在'「M」結尾缺少逗號:「接收」' –

+0

我不能改變的class structure – ibubi

+0

難道你沒有編譯錯誤:''OrderStatus':成員名稱不能和它們的封閉類型一樣嗎? –

0

我找到了解決方法有點瑣碎這樣,

dynamic obj = JsonConvert.DeserializeObject<dynamic>(message); 
OrderStats info = JsonConvert.DeserializeObject<OrderStats>(JsonConvert.SerializeObject(obj.A[0]));