Невозможно опубликовать объект json в asp. net webapi - PullRequest
1 голос
/ 05 августа 2020

Мне нужно передать следующий объект json моему asp. net core 3.1 web api

{
    "client": {
        "clientID": "3529",
        "clientData": "This a test data"
    },
    "selectedUserIDs": [
        3549,
        3567,
        3546,
        3561,
        3532       
    ],
    "selectedDepartmentsIDs": [
        10695,
        71,
        72,
        121     
       
    ]
}

Теперь, как я могу получить доступ к этому объекту в моем веб-API? Ниже приведен мой контроллер api

[HttpPost("/api/client/{id}/savedata")]
public ActionResult SaveClientDetails(int workflowID, [FromBody] Clientdata data)
{            
    //save operation        
}

, а далее - мой класс clientdata

public class clientdata
{
    public client client{ get; set; }
    public List<selectedUserIDs> selectedUserIDs{ get; set; }
    public List<selectedDepartmentsIDs> selectedDepartmentsIDs { get; set; }
}

и clientclass

public class client 
{
    public string clientID { get; set; }
    public string clientData { get; set; }
}

и класс selectedUserIDs, как показано ниже

public class selectedUserIDs
{        
    public int Ids{ get; set; }
}

и selectedDepartmentsIDs класс следующим образом

public class selectedDepartmentsIDs
{        
    public int Ids{ get; set; }
}

Но я не могу получить доступ к этому сложному объекту в теле веб-API

Почтальон выдает следующую ошибку

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|10eabbbb-4a15387d9152b7d6.",
    "errors": {
        "$.selectedUserIDs[0]": [
            "The JSON value could not be converted to System.Collections.Generic.List`1[ClientCoreAPI.Client.Entity.selectedUserIDs]. Path: $.selectedUserIDs[0] | LineNumber: 6 | BytePositionInLine: 12."
        ]
    }
}

1 Ответ

2 голосов
/ 05 августа 2020

Ваше определение clientdata не соответствует файлу json. У вас есть два варианта:

  1. Измените clientdata на:

     public class clientdata
     {
         public client client{ get; set; }
         public List<int> selectedUserIDs{ get; set; }
         public List<int> selectedDepartmentsIDs { get; set; }
     }
    
  2. Или измените json на

    {
        "client": {
            "clientID": "3529",
            "clientData": "This a test data"
        },
        "selectedUserIDs": [
            { "Ids": 3549 },
            { "Ids": 3567 },
            { "Ids": 3546 },
            { "Ids": 3561 },
            { "Ids": 3532 }       
        ],
        "selectedDepartmentsIDs": [
            { "Ids": 10695 },
            { "Ids": 71 },
            { "Ids": 72 },
            { "Ids": 121 }
        ]
    }
    
...