valueinjecter не копирует значения вложенных свойств

У меня есть следующий класс:

public class Ad
{
    public int Id {get;set;}

    public string Title { get; set; }

    public string UrlTitle { get; set; }

    public LookUp Color {get;set}

    public LookUp Condition {get;set}

    public int InsertUserId {get; set;}

    public DateTime InsertDate {get; set;}
}

Класс LookUp выглядит следующим образом:

public class LookUp
{
     public int Id {get;set;}

     public string Name { get; set; } 

     public int InsertUserId {get; set;}

     public DateTime InsertDate {get; set;}
}

Затем у меня есть ViewModels для таких классов, как:

public class AdModel
{
    public int Id {get;set;}

    public string Title { get; set; }

    public string UrlTitle { get; set; }

    public LookUpModel Color {get;set}

    public LookUpModel Condition {get;set}
}

public class LookUpModel
{
     public int Id {get;set;}

     public string Name { get; set; } 
}

Теперь в моем контроллере я делаю что-то вроде этого:

public IHttpActionResult Get(int adId)
{
    var ad = AdService.Get(adId);//Getting ad from DB

    AdModel adModel = new AdModel();
    adModel.InjectFrom(ad);
    return Ok(adModel);
}

Моя проблема в том, что ValueInjecter копирует только свойства первого уровня объявления, такие как Id, Title, UrlTitle, но не копирует свойство LookUp в свойство LookUpModel.


person Usman Khalid    schedule 13.03.2017    source источник
comment
похоже, что в классе AdModel нет метода InjectFrom...   -  person George Lica    schedule 13.03.2017
comment
Я использую valueinjecter, метод InjectFrom предоставляется ValueInjecter.   -  person Usman Khalid    schedule 13.03.2017
comment
используйте Mapper.Map вместо .InjectFrom читайте об этом здесь: github.com/omuleanu/ValueInjecter ; вам нужно будет вызвать Mapper.AddMap для каждой пары типов перед сопоставлением (и вызвать Mapper.Map внутри AddMap)   -  person Omu    schedule 13.03.2017
comment
Нет, даже Mapper.Map не работал, но я нашел здесь одно решение qubanshi.cc/questions/950728/, это работает. Спасибо   -  person Usman Khalid    schedule 14.03.2017


Ответы (1)


@Usman Khalid: вы можете использовать сериализацию и десериализацию объектов с помощью библиотеки JSON newtonsoft. а затем использовали метод injectfrom для объекта десериализации, который может решить вашу проблему.

example: Admodel model = new Admodel();
 var s = JsonConvert.SerializeObject(model);
 UserModel user = JsonConvert.DeserializeObject<UserModel>(s);
user.InjectFrom(user);
person Rahul Dhoundiyal    schedule 05.01.2020