C# 创建一个匿名对象,该对象必须在键名中包含点,并将其放入另一个匿名对象中
我正在为C# 创建一个匿名对象,该对象必须在键名中包含点,并将其放入另一个匿名对象中,c#,asp.net-mvc,anonymous-types,anonymous-class,C#,Asp.net Mvc,Anonymous Types,Anonymous Class,我正在为elasticsearch查询制作一个JSON主体 我有一个动态: var hlBodyText = new { bodyText = new { } }; 但有一种情况下,名称必须是bodyText.exact=new{},但显然不允许我这样做并返回错误消息: 无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问权限声明。 有一种方法可以使用点字符 编辑 此外,我必须把这个物体放在另一个物体里面,像这样: var fieldsInner = new {
elasticsearch
查询制作一个JSON主体
我有一个动态:
var hlBodyText = new
{
bodyText = new { }
};
但有一种情况下,名称必须是bodyText.exact=new{}
,但显然不允许我这样做并返回错误消息:
无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问权限声明。
有一种方法可以使用点字符
编辑
此外,我必须把这个物体放在另一个物体里面,像这样:
var fieldsInner = new
{
hlBodyText.bodyText
};
除了将属性名设置为点外,获得此结果的最佳方法是什么
编辑#2
我用所有参数创建了一个类
,因为我认为JsonProperty属性
可以帮助我
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属性的名称。您似乎在寻找它,稍后将字典转换为json
Dictionary<string,object> obj=new Dictionary<string,object>();
obj["bodyText.exact"]=new object{};
Dictionary obj=newdictionary();
obj[“bodyText.exact”]=新对象{};
您似乎正在创建一个匿名类型(不是“动态”)并希望使用在C#中无效的其他名称对其进行序列化。为此,需要使用命名类型并使用
属性:
internal class HlBodyText
{
[JsonProperty("bodyText.exact")]
public DateTime bodyText { get; set; }
}
并创建它的一个实例:
var hlBodyText = new HlBodyText()
{
bodyText = new { }
};
使用字典解决,然后将其传递到匿名类型obj
:
IDictionary highlitsFieldsContainer = new Dictionary<string, object>();
// ... some code
highlitsFieldsContainer["bodyText.exact"] = new { };
highlitsFieldsContainer["title.exact"] = new { };
var fieldsContainer = new
{
fields = highlitsFieldsContainer,
};
// OUTPUT: fieldsContainer = { fields = { bodyText.exact = {}, title.exact = {} } }
如何将其转换为Json?我不转换它,这是我使用Flurl
发送到ES
的大型对象的一小部分,动态不是一种类型。这是局部变量还是类属性?如果是属性,则可以使用@DStanley作为局部变量。也许创建一个具有属性的类会有所帮助这是个好主意,但对于我的情况来说,这可能还不够。我添加了一些关于问题的信息,但这些信息还不起作用fieldsInner
对象没有JsonParams属性
值,而是直接有类参数
名称。
RouteValueDictionary _res = new RouteValueDictionary(dynamicResponse.highlights);
if (_res["shortDescription.exact"] != null)
{
// ...
}