我有两个模特。
来源模型:
public sealed class adresse
{
public string strasse { get; set; }
public string hausnummer { get; set; }
public string plz { get; set; }
public string ort { get; set; }
public string landCode { get; set; }
}
目的地模型:
public sealed class Adresse
{
public string Strasse { get; set; }
public string Hausnummer { get; set; }
public string Plz { get; set; }
public string Ort { get; set; }
public string LandCode { get; set; }
}
因此,我使用automapper和单元测试创建了一个映射。
public class AddressMapper
{
public Address map()
{
adresse add = new adresse();
add.hausnummer = "1";
add.ort = "Test";
AutoMapper.Mapper.Initialize(cfg => {
cfg.AddProfile<Profile1>();
});
return AutoMapper.Mapper.Map<Address>(add);
}
}
public class LowerNamingConvention : INamingConvention
{
public Regex SplittingExpression
{
get { return new Regex(@"[\p{Ll}a-z A-Z 0-9]+(?=_?)"); }
}
public string SeparatorCharacter
{
get { return string.Empty; }
}
}
public class Profile1 : Profile
{
protected override void Configure()
{
SourceMemberNamingConvention = new LowerNamingConvention();
DestinationMemberNamingConvention = new PascalCaseNamingConvention();
CreateMap<adresse, Address>();
}
}
[TestFixture]
public class AddressMapperTest
{
[Test]
public void TestMapper()
{
var sut = new AddressMapper();
var value = sut.map();
}
}
当我运行测试时,目标模型中的每个字段都为空。
正如您所看到的那样,命名存在问题,因为源模型中的某些名称我有一些不同的命名约定,如小写或较低的驼峰情况。有没有人有想法解决这个问题?或者我是否必须手动绘制所有内容?
答案 0 :(得分:1)
您应该使用如下的DataContract和DataMember属性,这样您就不需要为属性指定相同的名称,也可以遵循编码标准。
[DataContract(Namespace = "")]
public class YourClass
{
[DataMember(EmitDefaultValue = false, Name = "myVariable")]
public string MyVariable { get; set; }
}
答案 1 :(得分:0)
我想我找到了解决问题的正确方法。很抱歉不熟悉正则表达式。我刚刚结合了
的RegExesAutoMapper/src/AutoMapper/PascalCaseNamingConvention.cs 和 AutoMapper/src/AutoMapper/LowerUnderscoreNamingConvention.cs
进入我自己的命名约定。可能存在可能导致问题的案例。但据我测试,它有效。
public class LowerNamingConvention : INamingConvention
{
public Regex SplittingExpression
{
get { return new Regex(@"[\p{Ll}0-9]+(?=$|\p{Lu}[\p{Ll}0-9])|\p{Lu}?[\p{Ll}0-9]+)"); }
}
public string SeparatorCharacter
{
get { return string.Empty; }
}
}