c# - 创建一个匿名对象,该对象必须在 Key 名称中包含点并将其放入另一个匿名对象中

标签 c# asp.net-mvc anonymous-types anonymous-class

我正在为 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{};

关于c# - 创建一个匿名对象,该对象必须在 Key 名称中包含点并将其放入另一个匿名对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58876065/

相关文章:

c# - 单一 Entity Framework 中具有相同架构的 Oracle 和 SQL Server 数据库

c# - 使用 List<T>.Sort 和 IEnumerable 的算法加速

c# - 创建新动态对象时的内联操作

c# - 如何使用迭代器获取字典的键/值?

vb.net - Linq、VB - 匿名类型无法转换为匿名类型

c# - LINQ 如何在 lambda 表达式中选择超过 1 个属性?

lambda - 基于 lambda 表达式创建匿名类型

c# - 按长度变量将字符串拆分为更小的字符串

c# - MVC 路由问题 : null entry

css - 在 MVC3 中设置 webgerid 列宽