我有一个在字符串类型字段中存储 XML 数据块的数据库表。我想将该 XML 的某些元素提取到自定义 ViewModel 中。
在此示例中,ErrorTableModel.ErrorXML 包含示例 XML 字符串。我正在尝试从该字符串中获取“消息”元素并将其映射到 ErrorViewModel.message。
这可以使用 AutoMapper 完成吗?
示例字符串。此数据存储在 ErrorTableModel 的 ErrorXML 属性中:
<error
application="TestApp"
type="System.DivideByZeroException"
message="Something wicked this way comes."
</error>
数据库模型:
public class ErrorTableModel
{
public int ErrorId { get; set; }
public string ErrorXml { get; set; }
}
自定义视图模型:
public class ErrorViewModel
{
public int id { get; set; }
public string application { get; set; }
public string type { get; set; }
public string message { get; set; }
}
更新: 我创建了一个新的帮助类,旨在帮助分解 XML。
protected override T ResolveCore(XElement source)
{
if (source == null || string.IsNullOrEmpty(source.Value))
{
return default(T);
}
return (T)Convert.ChangeType(source.Value, typeof(T));
}
当我从 ErrorViewModel 执行映射时,我试图引用该方法。
Mapper.CreateMap<XElement, ErrorViewModel>()
.ForMember(
dest => dest.ErrorXml,
options => options.ResolveUsing<XElementResolver<string>>()
.FromMember(source => source.Element("error")
.Descendants("message").Single()));
可悲的是,这不起作用......但我想我已经接近了。
更新2:
为了澄清起见,我希望结果数据如下所示:
ErrorViewModel.application = "TestApp"
ErrorViewModel.type = "System.DivideByZeroException"
ErrorViewModel.message = "Something wicked this way comes."