ServiceStack JSON序列化为dotnet核心的小写?

use*_*179 4 c# serialization servicestack servicestack-text .net-core

我正在使用ServiceStack来运行REST API,并且遇到了序列化响应对象的问题.更具体地说,当我调用JsonSerializer.SerializeToString(.)响应对象时,所有属性名称都以小写形式序列化.我试过摆弄params,JsConfig.EmitCamelCaseNames但这没有用.有任何想法吗?

请参阅下面的ServiceStack版本信息和屏幕截图.

"ServiceStack.Core": "1.0.32",
"ServiceStack.Kestrel": "1.0.32",
Run Code Online (Sandbox Code Playgroud)

要序列化的响应对象: 对象定义

序列化字符串: 序列化字符串

我相信这是针对dotnet核心的,因为这本来是一个.NET应用程序,我已经迁移到dotnet核心.我之前的应用程序版本中从未见过这个问题.我知道我可以使用本机序列化器,但我认为ServiceStack速度更快(如果我错了请告诉我).

myt*_*thz 11

.NET Core发行说明中记录了此行为:

除了在.NET Core上运行完美之外,我们还积极寻求如何最好地集成和利用周围的.NET Core生态系统,并为此做出了一些改变:

骆驼香烟盒

JSON和JSV Text序列化程序遵循.NET Core的默认约定,默认情况下使用camelCase属性.这可以通过以下方式恢复为PascalCase:

SetConfig(new HostConfig { UseCamelCase = false })
Run Code Online (Sandbox Code Playgroud)

我们也同意这个默认值,.NET Core似乎集中在周围的开发者生态系统中,其中.NET的默认PascalCase突出了camelCasesnake_case JSON API.这不会对支持不区分大小写的属性的.NET服务客户端或文本序列化产生影响,但是需要更新Ajax和JS客户端以使用匹配的属性.您可以使用ss-utils normalize()方法通过递归规范化并将所有属性转换为小写来帮助处理这两种约定.

自定义adhoc JSON序列化

以上将使用CamelCase作为ServiceStack服务,如果您只需要将adhoc对象序列化为JSON,则可以将其包装在配置对象中以覆盖全局设置,例如:

using (JsConfig.With(new Config { TextCase = TextCase.PascalCase }))
{
    var json = results.ToJson();
}
Run Code Online (Sandbox Code Playgroud)


use*_*179 0

我使用的解决方案列“使用字符串配置创建自定义范围”部分中。下面是一个对我有用的代码示例。

List<GetReturnObject> results = RestUtils.GetReturnObjects();
using (JsConfig.CreateScope("EmitCamelCaseNames:false"))
{
    var s = JsonSerializer.SerializeToString(results);
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,请参阅我更新的答案以获得更简洁的键入版本。 (2认同)