我正在使用ServiceStack来运行REST API,并且遇到了序列化响应对象的问题。更具体地说,当我在响应对象上调用JsonSerializer.SerializeToString(.)
时,所有属性名称都以小写形式序列化。我试图摆弄像JsConfig.EmitCamelCaseNames
这样的参数,但这没有用。有任何想法吗?
请参阅下面的ServiceStack版本信息和屏幕截图。
"ServiceStack.Core": "1.0.32",
"ServiceStack.Kestrel": "1.0.32",
我认为这是针对dotnet核心的,因为这本来是一个.NET应用程序,我已经迁移到dotnet核心。我之前的应用程序版本中从未见过这个问题。我知道我可以使用本机序列化器,但我认为ServiceStack速度更快(如果我错了请告诉我)。
答案 0 :(得分:11)
此行为为documented in the .NET Core Release Notes:
除了在.NET Core上运行完美之外,我们还积极寻求如何最好地集成和利用周围的.NET Core生态系统,并为此做出了一些改变:
驼峰
JSON和JSV Text序列化程序遵循.NET Core的默认约定,默认情况下使用camelCase属性。这可以通过以下方式恢复为PascalCase:
SetConfig(new HostConfig { UseCamelCase = false })
我们也同意这个默认值,.NET Core似乎主要围绕着周围的开发者生态系统,其中.NET的默认 PascalCase 突然出现在 camelCase 和< strong> snake_case JSON API。这不会对支持不区分大小写的属性的.NET服务客户端或文本序列化产生影响,但是需要更新Ajax和JS客户端以使用匹配的属性。您可以使用ss-utils normalize()方法通过递归规范化并将所有属性转换为小写来帮助处理这两种约定。
以上将使用CamelCase作为ServiceStack服务,如果您只需要将adhoc对象序列化为JSON,则可以将其包装在配置对象中以覆盖全局设置,例如:
using (JsConfig.With(emitCamelCaseNames: false))
{
var json = results.ToJson();
}
答案 1 :(得分:1)
已废弃使用:JsConfig.With(emitCamelCaseNames:false)
代替使用:
JsConfig.With(新ServiceStack.Text.Config {TextCase = TextCase.PascalCase})
答案 2 :(得分:0)
我使用的解决方案在“使用字符串配置创建自定义范围”部分中列出了here。下面是一个适合我的代码示例。
List<GetReturnObject> results = RestUtils.GetReturnObjects();
using (JsConfig.CreateScope("EmitCamelCaseNames:false"))
{
var s = JsonSerializer.SerializeToString(results);
}