Присвоение данных из списка классов другому списку классов - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть следующий класс, который заполняется после десериализации строки JSON:

public class Doors
{
    public List<Door> doors { get; set; }
}

public class Door
{
    public int id { get; set; }
    public string name { get; set; }
    public bool elevator { get; set; }
}

JSON string:

var result = JsonConvert.DeserializeObject<Doors>(response.Content);
// "{\"doors\":[{\"id\":1,\"name\":\"Main Door\",\"elevator\":false},{\"id\":2,\"name\":\"Back Door\",\"elevator\":false}]}"

Данные отображаются в мой класс Хорошо, тогда я пытаюсь передать данные класса другому классу:

public class WS4APIResult
{   
    public List<Door> doors { get; set; } = new List<Door>();      
}

public class Door
{
    public int id { get; set; }
    public string name { get; set; }
    public bool elevator { get; set; }
}

return new WS4APIResult() {         
    doors = result.doors
}

Со следующей ошибкой: есть идеи, пожалуйста?

Не удается неявно преобразовать тип 'System.Collections.Generic.List<WS4PortalApi.Models.Door>' до 'System.Collections.Generic.List<WS4PortalApi.Domain.Door>'

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Два c# -файла ссылаются на разные классы, если вы наберете Door. Вам нужно реализовать преобразование между WS4PortalApi.Models.Door и WS4PortalApi.Domain.Door.

Например:

public static WS4PortalApi.Domain.Door DoorConvert(WS4PortalApi.Models.Door door)

, тогда вы можете использовать linq для генерации нового списка

doors = result.doors
    .Select(d => DoorConvert(d))
    .ToList();
1 голос
/ 20 апреля 2020

Вы должны сопоставить свойства вашего доменного объекта со свойствами модели. Обычно я создаю метод для этого, например:

var doors = new List<Model.Door>();
foreach(door in result.doors)
{
     var doorModel = new Model.Door
     {
         id = door.id,
         name = door.name,
         elevator = door.elevator
     };
     doors.Add(doorModel);
}
return doors;

Или вы можете использовать библиотеку наподобие automapper.

...