鉴于 JSON 文本无效,{ "foo" = "bar" }
ServiceStack 内置的 JSON 反序列化器将成功将其解码为以下 DTO:
public class FooDto {
public string Foo { get; set; }
}
现在,也许这对于某些用例来说是可以接受的,因为它看起来有点像 C# 初始化程序,所以实际上可能不解析 JSON 是这个库的一个特性。
但是,当给定无效的 JSON 文本时{ "foo" xxx "bar" }
,不会引发任何错误,而且可怕的是 Foo 属性设置为“xxx”。
有没有办法(a)将 ServiceStack.Text 配置为仅解析 JSON(而不是默认情况下接受的任何非标准变体)或(b)在应用程序级别用 JSON.NET 替换序列化程序?
编辑:看起来 ServiceStack 的 Web 路由代码的反序列化行为与在无效解析ServiceState.Text.JsonSerializer
时返回的行为不同。default(T)
编辑2(进度?):
appHost.SetConfig(new HostConfig { UseBclJsonSerializers = true });
设置此选项将导致 ServiceStack 在格式错误的 JSON 上返回 400 Bad Request,但遗憾的是无法将 JSON 反序列化为给定的 DTO。也许这是解决方案的一部分?
解决方案:
用自定义的“application/json”处理程序替换 ServiceStack 的默认 JSON 序列化程序,该处理程序反过来包装 JSON.NET 序列化程序最终解决了问题。我在下面的答案中包含了解决方案代码的副本。我希望它有所帮助。