c# - 创建一个匿名对象,该对象必须在键名中包含点并将其放在另一个匿名对象中
问题描述
我正在做JSON body
一个elasticsearch
查询。
我有这个dynamic
:
var hlBodyText = new
{
bodyText = new { }
};
但是有一种情况下 name 必须是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
Dictionary<string,object> obj=new Dictionary<string,object>();
obj["bodyText.exact"]=new object{};
推荐阅读
- powershell - 这个语法有什么作用:| 选择@{E={$_.PSComputerName}; L='服务器'}、名称、进程 ID、路径名?
- javascript - 如何将全局对象从 NodeJS 传递到视图并访问数据?
- bash - 无法从终端在浏览器中打开 html 文件
- python - 来自数组列表的python pandas数据框
- javascript - 如何从 JS Axios 请求调用 PHP 页面上的函数
- azure - 将文件下载到 Azure VM
- vue.js - 在 vue2-google-map 中拖动后如何获取标记的坐标
- c++ - 错误 MSB3073: :VCEnd" 以代码 255 退出
- python - PC 将 Python 固定到任务栏而不是 Anaconda Navigator
- selenium - 无法在剑道网格上执行点击