c# - JSON 反序列化在 Web API 中不起作用
问题描述
我想反序列化一个 json 请求,但它在 Web API 中不起作用。我的代码在下面用于反序列化。你能告诉我我做错了什么吗?
[HttpPost]
public HttpResponseMessage AddOrder(string username , string password, JObject jsonResult)
{
try
{
AuthRepository _auth = new AuthRepository();
OrderDTO.RootObject O = new OrderDTO.RootObject();
O = JsonConvert.DeserializeObject<OrderDTO.RootObject>(jsonResult.ToString());
}
catch (Exception ex)
{
return Request.CreateErrorResponse(System.Net.HttpStatusCode.BadRequest, ex);
}
}
这是我们的方法将接收到的 JSON:
{
"token": "D8xJD2CI6PrkB3q5gnlT",
"shipment": {
"hawb": "0800780108",
"service_level": "CURBSIDE",
"status": "NEW",
"description": "bundle of things",
"service_level_code": "CB",
"delivery_date": "8/22/2019 5:01:00 PM",
"delivery2_date": "8/22/2019 12:00:00 AM",
"origin": {
"name": "ESTES EXPRESS BOSTON-080",
"nbr": "0800780108",
"phone": "508-513-0120",
"email": "",
"address1": "215 BODWELL ST",
"city": "AVON",
"state": "MA",
"zip_postal_code": "02322",
"country": "US"
},
"dest": {
"name": "JOSEPH VINOGRAD",
"nbr": "",
"phone": "",
"email": "",
"address1": "14 CORTLAND DR",
"city": "Sharon",
"state": "MA",
"zip_postal_code": "02067",
"country": "US"
},
"piece_count": "2",
"dangerous_goods": "0",
"weight": 190
}
}
类代码
public class OrderDTO
{
public class Origin
{
public string name { get; set; }
public string nbr { get; set; }
public string phone { get; set; }
public string email { get; set; }
public string address1 { get; set; }
public string city { get; set; }
public string state { get; set; }
public string zip_postal_code { get; set; }
public string country { get; set; }
}
public class Dest
{
public string name { get; set; }
public string nbr { get; set; }
public string phone { get; set; }
public string email { get; set; }
public string address1 { get; set; }
public string city { get; set; }
public string state { get; set; }
public string zip_postal_code { get; set; }
public string country { get; set; }
}
public class Shipment
{
public string hawb { get; set; }
public string service_level { get; set; }
public string status { get; set; }
public string description { get; set; }
public string service_level_code { get; set; }
public string delivery_date { get; set; }
public string delivery2_date { get; set; }
public Origin origin { get; set; }
public Dest dest { get; set; }
public string piece_count { get; set; }
public string dangerous_goods { get; set; }
public double weight { get; set; }
}
public class RootObject
{
public string token { get; set; }
public Shipment shipment { get; set; }
}
}
解决方案
您可以将username
和添加password
到您的OrderDTO
类(或包含这三个对象的另一个类),然后更改操作定义,例如:
public HttpResponseMessage AddOrder(OrderDRO input)
.
然后你不需要使用 json 序列化,你可以轻松地做你的逻辑。
推荐阅读
- c# - 文件上传在 Visual Studio IIS Express 中工作,但不在服务器上
- class - isabelle 可以展开具有显式类型的定义吗?
- windows - 需要一些关于选择 win32 文件 API 的提示
- python-3.x - How to append an item in a list for use later in a If-statement
- python - 如何在 pandocfilters 中获取带有降价的字幕?
- html - Mailchimp 模板列被推送到 Outlook 中的下一行
- javascript - 从 Android 手机上的 HTML 页面发送 SMS 文本而不显示 SMS 窗口
- postgresql - 用排好序的列描述表
- c - 主功能块下方的功能在 1 种情况下出现错误,但在 2 种情况下没有错误
- ruby - 在 ruby 中解决 Hackerrank 的字谜解决方案