json - 无法解析 JSON 参数
问题描述
我正在使用 WebAPI 来获取 POST 消息。POST 消息的正文:
{"datetime":"2017-01-06T20:40:44.2401244Z","filename":"somefilename.csv","datasourcename":"MyDataSource","error":"The uploaded file has no tags."}
POST 中包含的标头:
Content-type: application/json
我处理消息的操作方法:[HttpPost]
public void SaveMessage([FromBody] string msg)
{
MyModel w = JsonConvert.DeserializeObject<MyModel>(msg);
db.MyModels.Add(w);
db.SaveChanges();
}
我的问题是如何对 JSON 进行编码以便解析它?我无法更改传入的消息。我可以在我的方法中做什么以便我可以阅读它?现在msg
总是给我null
。
解决方案
鉴于您无法控制正在发送的数据,那么按照评论中的建议,确保您有一个与 JSON 的所需对象模型相匹配的模型
public class MyModel {
public DateTime datetime { get; set; }
public string filename { get; set; }
public string datasourcename { get; set; }
public string error { get; set; }
}
并利用 Web API 框架的模型绑定能力,让动作从请求体中绑定一个强类型模型。
[HttpPost]
public IHttpActionResult SaveMessage([FromBody] MyModel model) {
if(ModelState.IsValid) {
db.MyModels.Add(w);
if(db.SaveChanges() > 0)
return Ok();
}
return BadRequest();
}
如果保存消息有任何问题,该操作将返回 HTTP 状态代码 400 错误请求,否则将返回 HTTP 状态代码 200 OK。
推荐阅读
- webpack - 将动态导入捆绑到一个块中
- recursion - 意外递归,使用 Seq.append 炸毁堆栈,而不使用 `rec`
- java-8 - 番石榴到 Java 8 的转换
- java - Android Studio 运动模拟未按预期工作
- clojure - Clojure 惰性序列:Kotlin 中的等价物
- linux - Alfresco 5.2 高 CPU 利用率和应用程序性能低下
- javascript - 在 Elixir 中调用 JS api
- c# - 比较数据表和 SQL 表
- arrays - 出于数学目的声明矩阵的简单方法是什么?
- ios - CoreData fetch() 返回无序对象