为什么 IStringLocalizer 有时 returns 对象但有时 returns 字符串

Why IStringLocalizer sometimes returns object but sometimes returns string

我无法理解 IStringLocalizer 中的一件事。假设我有一个端点 returns 状态代码 200 和一些本地化字符串。


public async Task<IActionResult> Test()
{
   return Ok(localizer["Localized Text"])
}

如果我这样做,我将收到一个对象,其中包含有关此定位器的一些信息

{
  "name": "Localized Text",
  "value": "Localized Text translated",
  "resourceNotFound": false,
  "searchedLocalization": "MyApi.Translations"
}

为了成为返回翻译文本的字符串,我需要添加 .Value


public async Task<IActionResult> Test()
{
   return Ok(localizer["Localized Text"].Value)
}

(这个returns只有'Localized Text translated')

但是 如果我有一些 class 有一个字符串 属性

public class ResponseMessage {
   public string Message {get; set;}
}

并且我将本地化符分配给它的字符串 属性,然后我不必添加 .Value 来接收相应的翻译

public async Task<IActionResult> Test()
{
   return Ok(new ResponseMessage {
      Message = localizer["Localized Text"]
   })
}

我想知道,在文档的哪个位置描述了这种行为。因为现在它看起来像一个魔法。

IStringLocalizer indexer returns an instance of LocalizedString,这是您在第一个示例中直接 return 时序列化的内容。

对于您的其他场景,LocalizedString 通过其 implicit conversion operator 隐式转换为字符串。我假设隐式转换运算符只是 returns LocalizedString 值。

您可以查看 User-defined conversion operators page 以了解有关隐式转换的更多信息。