c# - json反序列化为C#中的对象
问题描述
如何将此json反序列化为C#中的订单对象
{
"d": "{
"success": true,
"errorMessage": null,
"data": {
"Orders": [
{
"OrderID": 4914194,
"FacilityID": 1398,
"FacilityOrderID": "",
"StatusID": "F",
"Contract": true,
"PermPlacement": false,
"ShiftDate": "08/05/2019",
"StartTime": "08:00:00",
"EndTime": "17:00:00",
"Meals": 30,
"Con_StartDate": "08/05/2019",
"Con_EndDate": "02/01/2020",
"Locked": true,
"LastModified": "2020-01-04 17:11:45",
"CreatedDate": "2019-06-17 13:39:00",
"FacilityName": "Carilion Roanoke Memorial Hospital",
"ScheduledRegID": 0,
"ScheduledRegName": "",
"ClassName": "RAD3",
"ClassDesc": "Rad Tech Specialty 2",
"AltClassName": "",
"AltClassDesc": "",
"CodeName": "1",
"ShiftNumber": 1,
"AreaID": 30799,
"AreaName": "Cardiology Clinic Outpatient",
"AreaAddress1": "",
"AreaAddress2": "",
"AreaCity": "",
"AreaCounty": "",
"AreaState": "",
"AreaZip": "",
"LockReason": "Position is filled, awaiting credentials",
"CancelReason": "",
"Note": "Registered Echo Sonographer. 8 or 9 hours per day, 40 hours per week. Vascular experience helpful.",
"IsTraveler": false,
"Rate": 0,
"ContractPattern": "Sun, Mon, Tue, Wed, Thu, Fri, Sat",
"Con_Guarantee": 0,
"Con_Weeks": 26
}
]
}"
}
}
我已经尝试过 JObject.selectToken 并且什至无法访问任何令牌
var jsContents = JObject.Parse(contents)
var jsOrder = jsContents.SelectToken("d.data.Orders[0]") // null
或者
var exp = new JavaScriptSerializer().Deserialize<Order>(contents);
解决方案
我建议使用在线资源将您的 JSON 转换为 c# 类。我建议使用json2charp来获取您需要的类。
每当您为 json 创建类时,请记住为用花括号 {} 括起来的每个对象创建一个 json。每个 [] 都变成了一个 List,其余大部分都符合 string、bool、int 等。
以下是适用于您发布的 JSON 的结构。为此,您还需要安装/使用Newtonsoft.Json
.
public class Order
{
public int OrderID { get; set; }
public int FacilityID { get; set; }
public string FacilityOrderID { get; set; }
public string StatusID { get; set; }
public bool Contract { get; set; }
public bool PermPlacement { get; set; }
public string ShiftDate { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public int Meals { get; set; }
public string Con_StartDate { get; set; }
public string Con_EndDate { get; set; }
public bool Locked { get; set; }
public string LastModified { get; set; }
public string CreatedDate { get; set; }
public string FacilityName { get; set; }
public int ScheduledRegID { get; set; }
public string ScheduledRegName { get; set; }
public string ClassName { get; set; }
public string ClassDesc { get; set; }
public string AltClassName { get; set; }
public string AltClassDesc { get; set; }
public string CodeName { get; set; }
public int ShiftNumber { get; set; }
public int AreaID { get; set; }
public string AreaName { get; set; }
public string AreaAddress1 { get; set; }
public string AreaAddress2 { get; set; }
public string AreaCity { get; set; }
public string AreaCounty { get; set; }
public string AreaState { get; set; }
public string AreaZip { get; set; }
public string LockReason { get; set; }
public string CancelReason { get; set; }
public string Note { get; set; }
public bool IsTraveler { get; set; }
public int Rate { get; set; }
public string ContractPattern { get; set; }
public int Con_Guarantee { get; set; }
public int Con_Weeks { get; set; }
}
public class Data
{
public List<Order> Orders { get; set; }
}
public class D
{
public bool success { get; set; }
public object errorMessage { get; set; }
public Data data { get; set; }
}
public class RootObject
{
public D d { get; set; }
}
并且您会将您的 json 反序列化为,RootObject
就像这样。
var obj = JsonConvert.DeserializeObject<RootObject>(json);
List<Order> allOrders = obj.d.data.Orders;
反序列化 json 后,您可以访问订单并使用它们执行您需要执行的操作。
更新
再次查看您的 Json 后,您为 d 拥有的数据不是一个对象,而只是一个字符串。您需要这样做才能正确反序列化。
var obj = JsonConvert.DeserializeObject<D>(JObject.Parse(json)["d"].ToString());
var allOrders = obj.data.Orders;
推荐阅读
- android - android 设备监视器在我的 android studio 3.0.1 中不可用
- reactjs - 如何在 React 状态下更新数组中特定索引处的对象?
- wpf - Combobox selectedindex =-1 也会删除可编辑组合框中写入的文本
- c++ - 填充窗口外背景QT
- vue.js - VueJS - 动态状态管理多个实例
- c++ - 使用 Matlab 连接但不接收的 TCPIP 服务器
- spring-cloud - 无法构建 spring-cloud-contract
- ios - 需要根据收到的 json 数据显示 TableView 部分和行
- c# - 使用多个线程来处理一个大列表?
- python - 我怎样才能使这段代码更高效,即一两行?