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)。对于类似的情况,您需要保留一张常见拼写错误和变体的地图,以便进行修复。我猜这个列表在开始时并不全面,但会随着时间的推移而扩展。