将嵌套的JObject反序列化为ViewModel

时间:2015-07-14 18:49:03

标签: json web int asp.net-web-api

我已经嵌套了JObject:

{
"model": {
"id": "1",
"amount": "1.00",
"details": {
    "tax": "0.10",
    "order": "DFG456"
},
"lineItems": [
  {
    "commodityCode": "abc",
    "unitOfMeasure": "pnd",
    "quantity": "1",
    "uomCost": "1.00",
    "taxAmount": "0.10",
    "itemTotalAmount": "0.10"
  },{
    "commodityCode": "xyz",
    "unitOfMeasure": "pnd",
    "quantity": "2",
    "uomCost": "1.00",
    "taxAmount": "0.10",
    "itemTotalAmount": "0.10"
  }
]

} }

我正在尝试将其反序列化为我的ViewModel,结构如下:

public class MyViewModel {
    int id { get; set;}
    decimal amount { get; set; }
    DetailsVm details { get; set;} 
    List<DetailItem> DetailsItemsList { get; set; }
}

我可以使用动态对象来解决顶级模型和子细节对象的问题:

var model = json.model.ToObject<MyViewModel>;
var details = json.serviceInfo.ToObject<DetailsVm>;

但是,我找不到从json中提取DetailsItems列表的方法。模型中的属性为null。关于如何提取子可枚举对象的任何建议将不胜感激。数组,列表,只是可枚举 - 任何一种方式都可以。

2 个答案:

答案 0 :(得分:1)

制作如下模型:

public class MyViewModel {
    int id { get; set;}
    decimal amount { get; set; }
    DetailsVm details { get; set;} 
    IEnumerable<DetailItem> DetailsItemsList { get; set; }
}

然后更改json以发送集合NAMED DetailsItemsList。

模型的属性名称必须与json中指定的名称匹配。

答案 1 :(得分:0)

在这里找到答案:Deserialize JSON into C# dynamic object?。 Tom Peplow的回答最符合我的需求:

使用Newtonsoft.Json.Linq; model = JObject.Parse(jsonString);