Asp.net web api WebAPI和对象参数以及列表(共T个)

Asp.net web api WebAPI和对象参数以及列表(共T个),asp.net-web-api,Asp.net Web Api,我有一个WebAPI方法,如下所示: Public Function PostTestStatus(dto As DTOStatusUpdate) As HttpResponseMessage “dto”参数定义如下: Public Class DTOStatusUpdate Property QueryByNameDTO As QueryByNameDTO Property Tests As ICollection(Of Test) Public Sub New()

我有一个WebAPI方法,如下所示:

Public Function PostTestStatus(dto As DTOStatusUpdate) As HttpResponseMessage
“dto”参数定义如下:

Public Class DTOStatusUpdate
  Property QueryByNameDTO As QueryByNameDTO 
  Property Tests As ICollection(Of Test)

  Public Sub New()
    Me.Tests = New Collection(Of Test)
  End Sub
End Class
测试只是一个简单的类(仅限字符串/整数)

我将发送以下json:(验证为正确)

由于(测试的)集合无效/不正确,因此无法访问我的方法 我试过列表(测试)、IEnumerable(测试)和其他各种组合都不起作用

我没有得到的部分是,如果我在没有“测试”列表的情况下发送json,我的方法断点就会到达,并且第一个属性(QueryByNameDTO)都存在并且正确

如果我将DTOStatusUpdate类更改为只使用一个单独的“测试”,而不是一个测试列表,那么它也可以工作

问题似乎在于(测试的)列表/集合/枚举的使用

我做错什么了,我已经在这干了几个小时了,而且我的脑子里都在干。我在谷歌上搜索,转圈转圈,试图找到一个解释。我得到的最接近的结果是添加到参数,然后该参数到达方法和断点,但参数的所有属性都是空的

我可以从一个webapi方法返回一个IEnumerable(任意的),那么我缺少什么来发送给一个webapi方法呢

EDIT1:将测试类拆分为一个字段“id”,在该字段中它工作正常,并将其重新构建,我已将其缩小为该类中一个字段的一个属性

下面是来自测试类Status和DNNUserId的两个字段。 无论是否使用所需属性,“状态”都可以正常工作! 但是,将Required属性添加到DNNUserId属性会导致无法调用/访问该方法吗?去掉所需的属性就行了

也许我在这方面做得太久了,因为除了字符串和整数没有区别?如果需要整数,json的格式是否应该不同?有人能解释一下吗

Private _Status As String
<Required()>
Public Property Status As String
    Get
        Return _Status
    End Get
    Set(value As String)
        If _Status <> value Then
            _Status = value
            OnPropertyChanged("Status")
        End If
    End Set
End Property

Private _DNNUserId As Integer
Public Property DNNUserId As Integer
    Get
        Return _DNNUserId
    End Get
    Set(value As Integer)
        If _DNNUserId <> value Then
            _DNNUserId = value
            OnPropertyChanged("DNNUserId")
        End If
    End Set
End Property
Private\u状态为字符串
公共属性状态为字符串
得到
返回状态
结束
设置(值为字符串)
如果_状态值,则
_状态=值
OnPropertyChanged(“状态”)
如果结束
端集
端属性
Private _dnuserid作为整数
公共属性DNNUserId为整数
得到
返回\u dnuserid
结束
设置(值为整数)
如果_dnuserid值,则
_DNNUserId=值
OnPropertyChanged(“DNNUserId”)
如果结束
端集
端属性

你能试试这个,看看它是否有效吗

Public Class DTOStatusUpdate
  Public Property QueryByNameDTO As QueryByNameDTO 
  Public Property Tests As ICollection(Of Test)

  Public Sub New()
    Me.Tests = New Collection(Of Test)
  End Sub
End Class

我认为如果没有指定访问器,属性在默认情况下是公共的?不管怎么说,我试过了,没什么区别。你是对的。这是我的错。我知道代码是VB.NET,但在我的脑海里,它怎么没有点击。可能需要太多的C#编码。无论如何,您提供的JSON都可以完美地绑定到类。我无法纠正你的问题。对不起,我帮不上忙。
Public Class DTOStatusUpdate
  Public Property QueryByNameDTO As QueryByNameDTO 
  Public Property Tests As ICollection(Of Test)

  Public Sub New()
    Me.Tests = New Collection(Of Test)
  End Sub
End Class