オブジェクトの配列を 1 つのオブジェクトにマップしたいと思います。
例えば:
public class ArrayData
{
//name of property in class MyObject in upper under score casing
public string PropName{get;set;}
//value of property in class MyObject
public string PropValue{get;set;}
}
ソースデータ:
ArrayData [] sourceData = new ArrayData[]{new ArrayData{PropName="MY_ID",PropValue="1"}}
宛先オブジェクト:
public class MyObject
{
public int MyId{get;set;}
}
私の目的は、MyObject.MyId を 1 に設定することです。
規則は次のとおりです。
if(ArrayData.PropName == MyObject.Property.Name)
{
MyObject.PropName = ArrayData.PropValue;
}
編集:私はこの方法を試しました:
public class UpperUnderscoreNamingConvention : INamingConvention
{
#region Implementation of INamingConvention
public Regex SplittingExpression
{
get { throw new System.NotImplementedException(); }
}
public string SeparatorCharacter
{
get { return string.Format("_"); }
}
#endregion
}
public class TestProfile: Profile
{
public override string ProfileName { get { return "TestProfile"; } }
protected override void Configure()
{
SourceMemberNamingConvention = new UpperUnderscoreNamingConvention();
DestinationMemberNamingConvention = new PascalCaseNamingConvention();
CreateMap<ArrayData, MyObject>()
.ForMember(dest => dest.MyId, opt =>
{
opt.Condition(src => src.ColumnName == "MY_ID");
opt.MapFrom(src => src.Value);
});
}
}
変換:
Mapper.Initialize((obj) => obj.AddProfile(new TestProfile()));
var myClass = Mapper.Map<ArrayData[], MyClass>(sourceData);
うまくいきません、私はこの例外を受け取ります:
AutoMapper.AutoMapperMappingException: 型マップ構成が欠落しているか、サポートされていないマッピングです。
また、すべてのプロパティを手動でマップするのは良い解決策ではないと思います:
.ForMember(dest => dest.MyId, opt => opt.Condition(src => src.ColumnName =="MY_ID"))