【问题标题】:System.Text.Json does not camelize properties of the dynamic propertySystem.Text.Json 不骆驼化动态属性的属性
【发布时间】:2021-11-27 16:31:59
【问题描述】:

我正在使用 ASP.NET Core 和 System.Text.Json

这是我的示例操作方法:

    [HttpGet]
    public object Person()
    {
        dynamic relatedItems = new ExpandoObject();
        relatedItems.LastName = "Last";
        var result = new 
        {
            FirstName = "First",
            RelatedItems = relatedItems
        };
        return result;
    }

这是我得到的回应:

{
    firstName: "First",
    relatedItems: {
        LastName: "Last"
    }
}

如您所见,LastName 是动态属性的一个属性,没有骆驼化。

我怎样才能让所有东西都装在骆驼箱里?

更新。这个答案不是我的答案。如您所见,我已经将 firstName 属性正确地骆驼化了。

【问题讨论】:

  • 可以确认这个不是那个帖子的副本
  • 很抱歉您的问题已关闭,我认为这是一个错误并发送了报告here。同时,我建议尽可能切换到 Dictionary 或匿名类型,而不是 ExpandoObject
  • 顺便说一句,为您找到了解决方法,请查看this commentExpandoObject 被认为是字典,所以你需要设置DictionaryKeyPolicy 而不是PropertyNamingPolicy
  • @LukeVo,非常感谢。是的,这解决了问题。

标签: c# json asp.net-core system.text.json camelcasing


【解决方案1】:

ExpandoObject 将被视为字典,因此除了PropertyNamingPolicy 之外,还需要设置DictionaryKeyPolicy

dynamic relatedItems = new ExpandoObject();
relatedItems.LastName = "Last";
var result = new 
{
    FirstName = "First",
    RelatedItems = relatedItems
};
var s=JsonSerializer.Serialize(result, new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    DictionaryKeyPolicy = JsonNamingPolicy.CamelCase
});
Console.WriteLine(s); // prints {"firstName":"First","relatedItems":{"lastName":"Last"}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2019-01-16
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多