Вам удалось найти метод, AutoMap()
, который не имеет непосредственно соответствующего аналога в синтаксисе инициализатора объекта :). Поскольку нет универсального параметра типа для представления доступного типа CLR, его нельзя смоделировать. так же.
Однако вы можете добиться того же эффекта, используя компоненты, которые AutoMap
использует
var nestedProperty = new NestedProperty
{
Name = Nest.Infer.Property<PackageVersion>(pv => pv.Dependencies.First()),
Properties = new Properties<PackageDependency>(
new PropertyWalker(typeof(PackageDependency), null).GetProperties())
};
, что приведет к следующему JSON, которому присвоено имя поля, разрешенное из Nest.Infer.Property<PackageVersion>(pv => pv.Dependencies.First())
(по умолчанию будет dependencies
)
{
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"framework": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
Если вам нужно переопределить какие-либо свойства, которые будут автоматизированы таким образом, вы можете сделать это либо с помощью IProperties
, возвращенного вызовом метода .GetProperties()
, либо с помощью индексатора на Properties<T>
, который в этом случае равен Properties<PackageDependency>
пример.