C# 按顺序排列的自动映射配置属性(匿名类型和动态类型)
我正在使用库来创建C# 按顺序排列的自动映射配置属性(匿名类型和动态类型),c#,json.net,automapper,C#,Json.net,Automapper,我正在使用库来创建列表对象: List<dynamic> dynamics = Newtonsoft.Json.Linq.JArray.Parse(response.Content); List dynamics=Newtonsoft.Json.Linq.JArray.Parse(response.Content); 我想实现将每个动态对象解析为匿名类型。所以为了达到这个目的,我使用了 问题在于,此自动映射功能基于基于PropertyName的约定。因此,将映射具有相同名称的每个
列表
对象:
List<dynamic> dynamics = Newtonsoft.Json.Linq.JArray.Parse(response.Content);
List dynamics=Newtonsoft.Json.Linq.JArray.Parse(response.Content);
我想实现将每个动态
对象解析为匿名类型
。所以为了达到这个目的,我使用了
问题在于,此自动映射功能基于基于PropertyName的约定。因此,将映射具有相同名称的每个属性
我突然想到的问题是json键comment
可能类似于:comment
,comment
,comment
,等等。因此,如果AnonymousType有一个属性comment
,AutoMapper将不会映射该属性。所以,anonymous.comment不等于dynamic.comment
然而,匿名类型可能具有完全不同的命名属性。所以,anonymous.field不等于dynamic.comment
我想按顺序映射每个属性。因此,anotnymous类型的第一个属性映射到动态的第一个属性
我怎样才能得到它呢?创建一个新的基类型,它派生自
DynamicObject
,用于处理您在TryGetMember
或类似方法中希望的命名约定。然后,当运行时AutoMapper调用对象时,您可以处理命名问题:
public bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name.ToLower();
if (name == "comment")
{
// save comment
}
return false;
}
创建一个新的基类型,该基类型派生自
DynamicObject
,用于处理TryGetMember
或类似方法中所需的命名约定。然后,当运行时AutoMapper调用对象时,您可以处理命名问题:
public bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name.ToLower();
if (name == "comment")
{
// save comment
}
return false;
}
这是一个很好的解决办法。但是,我不知道如何处理绝对不同的属性名(anonymous.field/dynamic.dleif)。对于类似的情况,您需要保留一张常见拼写错误和变体的地图,以便进行修复。我猜这个列表在开始时并不全面,但会随着时间的推移而扩展。这是一个很好的解决方案。但是,我不知道如何处理绝对不同的属性名(anonymous.field/dynamic.dleif)。对于类似的情况,您需要保留一张常见拼写错误和变体的地图,以便进行修复。我猜这个列表在开始时并不全面,但会随着时间的推移而扩展。