首页 > 解决方案 > WebApi c#rest web service不能传递对象列表

问题描述

我正在构建一个简单的完整的 web 服务来将数据存储到数据库中。

所以这是我的代码:

[Route("InsertActivities")]
[HttpPost]
public HttpResponseMessage InsertActivities(ActivityExecutionDTO u)
{
    try
    {
        if (u != null)
        {
            //TO DO
        }

    }
    catch (Exception e)
    {

    }
}

这是 ActivityExecutionDTO 类:

namespace WebService.Models
{
    [DataContract(Name = "ActivityExecutionDTO")]
    public class ActivityExecutionDTO
    {
        [DataMember(Name = "Username", Order = 1)]
        public string UserName { get; set; }
        [DataMember(Name = "Password", Order = 2)]
        public string Password { get; set; }
        [DataMember(Name = "IdClinicalDocument", Order = 3)]
        public int IdClinicalDocument { get; set; }
        [DataMember(Name = "ActivityDetails", Order = 4)]
        public IQueryable<ActivityExecutionDetailDTO> ActivityDetails { get; set; }
    }
}

ActivityExecutionDetailDTO 类:

namespace WebService.Models
{
    [DataContract]
    public class ActivityExecutionDetailDTO
    {
        [DataMember(Name = "Id")]
        public int ID { get; set; }
        [DataMember(Name = "IdClinicalDocument"), IgnoreDataMember]
        public int IdClinicalDocument { get; set; }
        [DataMember(Name ="IdActivity")]
        public int IdActivity { get; set; }
        [DataMember(Name = "DateExecution"), IgnoreDataMember]
        public DateTime? DateExecution { get; set; }
        [DataMember(Name = "Duration")]
        public Int32? Duration { get; set; }
        [DataMember(Name = "CalBurned")]
        public Int32? CalBurned { get; set; }
        [DataMember(Name = "Steps")]
        public Int32? Steps { get; set; }
    }
}

所以这是我通过 PostMan 客户端传递的 JSON:

{
    "Username" : "t.g",
    "Password" : "t",
    "IdClinicalDocument" : 63,
    "ActivityDetails" :
    [
        {
            "Id" : 1,
            "IdClinicalDocument" : 63,
            "IdActivity" : 1,
            "DateExecution" : null,
            "Duration" :  150,
            "CalBurned" : 9600,
            "Steps" :  150
        }
    ]
}

因此,如果我尝试检查我的代码此代码:

u.ActivityDetails

每次都是空的。

活动列表为空。错误在哪里?

标签: c#restasp.net-web-api

解决方案


更改IQueryable<ActivityExecutionDetailDTO>ICollection<ActivityExecutionDetailDTO>

IQueryable 仅存储查询定义,其中不能有数据,而是 ICollection。


推荐阅读