我使用 ServiceStack.Text 作为我的服务中的默认序列化程序。
今天遇到了一个意想不到的问题:
- 在其中一项服务对序列化程序进行了一些 JsConfig 配置之后
- 并且使用了序列化程序(即对象被序列化和反序列化)
- 后来调用的另一个服务尝试在此基础上添加其自定义配置,但该配置被忽略。
如果 service2 的自定义配置被提升了一个级别并在使用序列化程序之前完成,那么一切都按预期工作。
这是否意味着:
- 配置只能在 AppStart 上完成,还是在使用序列化程序后无法覆盖?
- 或者一旦使用序列化程序,配置是否缓存在某个地方?如果是这样,是否可以强制缓存自行刷新?
你能想到会导致这种问题的其他任何事情吗?
我在每项服务中始终使用 3.9.35 版本。所有 3 项服务都是 WebApi 项目。
我编写了一个非常简单的控制台应用程序来演示该问题:
namespace SerializationTest
{
class Program
{
static void Main(string[] args)
{
var foo = new Foo() {Id = "abcdef", Type = "standardFoo"};
var bar = new Bar() {Color = "red", Number = 10};
JsConfig<Foo>.IncludeTypeInfo = true;
var serializedFoo = JsonSerializer.SerializeToString(foo);
var serializedBar = JsonSerializer.SerializeToString(bar);
var deserializedFoo = JsonSerializer.DeserializeFromString<Foo>(serializedFoo);
var deserializedBar = JsonSerializer.DeserializeFromString<Bar>(serializedBar);
JsConfig<Foo>.IncludeTypeInfo = false;
JsConfig<Bar>.IncludeTypeInfo = true;
var serializedFoo2 = JsonSerializer.SerializeToString(foo);
var serializedBar2 = JsonSerializer.SerializeToString(bar);
var deserializedFoo2 = JsonSerializer.DeserializeFromString<Foo>(serializedFoo2);
var deserializedBar2 = JsonSerializer.DeserializeFromString<Bar>(serializedBar2);
Console.ReadKey();
}
}
public class Foo
{
public string Id { get; set; }
public string Type { get; set; }
}
public class Bar
{
public int Number { get; set; }
public string Color { get; set; }
}
}