我有個問題。我有 2 個 Dto 物件和一個模型。
我想要做的是使用 Automapper 將AssetDTO映射到資產模型。
我不知道如何做到這一點。
public class AssetDTO
{
public string Code { get; set; }
public string CodeType { get; set; }
public List<MetricDataDTO> Data { get; set; }
}
public class MetricDataDTO
{
public string Value{ get; set; }
public string Flow { get; set; }
}
我有一個看起來像這樣的模型。
public class Asset
{
public string Code { get; set; }
public string CodeType { get; set; }
public string Value{ get; set; }
public string Flow { get; set; }
}
我嘗試使用 automapper 設定映射但沒有任何運氣 :( 希望任何人都可以幫助我,提前謝謝!!
uj5u.com熱心網友回復:
如果假設資產內的價值和流量是陣列,我認為您當前的模型Asset需要更改(即通過創建新欄位List<MetricData>,如List<MetricDataDTO>)。稍后您可以檢查這個AutoMapper - 將物件串列映射到更大的物件串列。
如果每項資產只有一個價值和流量,您的模型AssetDTO將變為:
public class AssetDTO
{
public string Code { get; set; }
public string CodeType { get; set; }
public MetricDataDTO Data { get; set; }
}
對于這種情況,這里是嵌套物件的示例(基于Using automapper for nested objects):https ://dotnetfiddle.net/qVg59r
下面的答案也簡單得多https://stackoverflow.com/a/74471904/10766263
uj5u.com熱心網友回復:
感謝 Lucian Bargaoanu!
如果在展平時需要更多控制,可以使用 IncludeMembers。當您已經擁有從子型別到目標型別的映射時,您可以將子物件的成員映射到目標物件。
這允許您在映射父型別 AssetDTO 和 Asset 時為子型別 MetricDataDTO 重用現有映射中的配置。
它的作業方式與映射繼承類似,但它使用組合而不是繼承。
cfg.CreateMap<AssetDTO, Asset>().IncludeMembers(s=>s.MetricDataDTO);
您可以查看此鏈接了解詳細資訊。 https://docs.automapper.org/en/latest/Flattening.html#includemembers
希望它能幫助你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535906.html
