无法将类型'Newtonsoft.Json.Linq.JObject'转换为复杂类型

ibu*_*ubi 3 c# json casting json.net

我有json如下,

{
  "H": "Macellum",
  "M": "Receive",
  "A": [
    {
      "CustomerId": "172600",
      "OrderId": "69931",
      "OrderStatus": "E0",
      "Buy": "A"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

和复杂的类型

public class OrderStats
{
    public string CustomerId { get; set; }
    public string OrderId { get; set; }
    public string OrderStatus { get; set; }
    public string Buy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试铸造如下,

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

但错误如下

无法将类型'Newtonsoft.Json.Linq.JObject'转换为OrderStatus

Vik*_*hyn 15

这个怎么样?

var str = "YOUR_JSON_HERE";
var obj = JsonConvert.DeserializeObject<dynamic>(str);
OrderStats info = ((JArray)obj.A)[0].ToObject<OrderStats>();
Run Code Online (Sandbox Code Playgroud)

  • 解决方案如果你没有数组:`((JObject)Tags).ToObject <OrderStats>();` (3认同)

ibu*_*ubi 6

我找到了一个像这样有点微不足道的解决方案,

dynamic obj = JsonConvert.DeserializeObject<dynamic>(message);
OrderStats info = JsonConvert.DeserializeObject<OrderStats>(JsonConvert.SerializeObject(obj.A[0]));
Run Code Online (Sandbox Code Playgroud)