我有两个模型:儿童和位置。他们有一段感情。这就是位置的样子:
public class Location {
[Key]
public int Id { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public float Accuracy { get; set; }
public DateTime ReportTime { get; set; }
[JsonIgnore]
public virtual Child Child { get; set; }
}
`
Child模型沿着这些行(FirstName,LastName等)查看,并引用ICollection<Location> Locations
。
我的控制器看起来像这样:
[ResponseType(typeof(Location))]
public IHttpActionResult PostLocation([FromBody] Location location)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Locations.Add(location);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = location.Id }, location);
}
当使用移动设备的JSON发布数据时,理想情况下我想传递Child的ID值而不是整个Child对象。但是,每次检查传入的Location
对象时,child
属性都设置为null
。我尝试了以下JSON:
{
"Latitude": 43.63434,
"Longitude": -92.12345,
"Accuracy": 13,
"ReportTime": "2016-05-11T23:29:30.87",
"Child": {
"Id": 3
}
}
和
{
"Latitude": 43.63434,
"Longitude": -92.12345,
"Accuracy": 13,
"ReportTime": "2016-05-11T23:29:30.87",
"Child": 3
}
我甚至尝试传递一个完整的Child
对象(复制/粘贴我从我自己的详细信息GET ApiController获得的内容),但是该子项仍然设置为null。
我是ASP.NET新手,特别是Web API,所以我很感激任何帮助。如何指示WebAPI至少解析Child对象的ID部分?
我知道技术上我可以通过向Location模型int ChildId
添加另一个属性来解决这个问题 - 但我想知道是否有更优雅的解决方案(有很多模型与{{1}相关联})。
谢谢!
答案 0 :(得分:0)
将Child的属性名称更改为其他名称。例如
public virtual Child ChildProp { get; set; }
你的Json数据:
{
"Latitude": 43.63434,
"Longitude": -92.12345,
"Accuracy": 13,
"ReportTime": "2016-05-11T23:29:30.87",
"ChildProp": {
"Id": 3
}
}