【发布时间】:2019-11-15 11:24:42
【问题描述】:
我正在为elasticsearch 查询创建JSON body。
我有这个dynamic:
var hlBodyText = new
{
bodyText = new { }
};
但是有一种情况,名字必须是bodyText.exact = new { },但显然我不允许这样做并返回错误信息:
Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.
有一种方法可以使用dot char 来命名该值?
编辑
此外,我必须把这个对象放在另一个对象中,像这样:
var fieldsInner = new
{
hlBodyText.bodyText
};
除了用点设置属性名称之外,获得此结果的最佳方法是什么?
编辑#2
我用我的所有参数创建了一个class,因为我认为JsonProperty attribute 可以帮助我。
internal class ElasticSearchHighlightsModel
{
[JsonProperty("bodyText")]
public object bodyText { get; set; }
[JsonProperty("title")]
public object title { get; set; }
[JsonProperty("shortDescription")]
public object shortDescription { get; set; }
[JsonProperty("bodyText.exact")]
public object bodyTextExact { get; set; }
[JsonProperty("title.exact")]
public object titleExact { get; set; }
[JsonProperty("shortDescription.exact")]
public object shortDescriptionExact { get; set; }
}
然后在我的方法中,我有一个条件,我必须使用一些参数或其他参数。
// ...some code...
else
{
var hlBodyText = new ElasticSearchHighlightsModel() { bodyTextExact = new { } };
var hlTitle = new ElasticSearchHighlightsModel() { titleExact = new { } };
var hlShortDescription = new ElasticSearchHighlightsModel() { shortDescriptionExact = new { } };
var fieldsInner = new
{
hlBodyText.bodyTextExact,
hlTitle.titleExact,
hlShortDescription.shortDescriptionExact,
};
var fieldsContainer = new
{
pre_tags = preTags,
post_tags = postTags,
fields = fieldsInner,
};
return fieldsContainer;
}
但 fieldsInner 对象有参数名称(bodyTextExact、titleExact 等...),而不是 JsonProperty attribute 的。
【问题讨论】:
-
如何将其转换为 Json?
-
我不转换它,这是我使用
Flurl发送给ES的一个大对象的一小部分 -
dynamic不是类型。这是局部变量还是类属性?如果它是一个属性,您可以使用JsonPropertyattribute -
@DStanley 是一个局部变量。也许创建一个具有属性的类会有所帮助
标签: c# asp.net-mvc anonymous-types anonymous-class