我们有一个应用程序,我们正在使用 ServiceStack.Redis 进行缓存。该应用程序是一个 REST API,我们在其中以 JSON 格式提供响应。我们使用 Newtonsoft JSON.NET 来序列化我们的响应,当然 ServiceStack.Redis 使用 ServiceStack.Text 来序列化/反序列化存储在 Redis 缓存中的数据。
问题是我们想要在缓存中存储比我们提供给客户端更多的数据。因此,我们一直在使用 JSON.NET 中的 [JsonIgnore] 属性标记我们不想向客户端公开的属性。这在 ServiceStack.Redis 4.0.20 中效果很好,但是当我们升级到 4.0.30 时就坏了。似乎他们改变了 Json Serializer 的行为以尊重 JSON.NET 的 JsonIgnore 属性(https://github.com/ServiceStack/ServiceStack.Text/pull/420)。
所以如果我们有课
public class FooBar
{
public string Foo { get; set; }
[JsonIgnore]
public string Bar { get; set; }
}
并尝试序列化对象
var fooBar = new FooBar { Foo = "A", Bar = "B" }
过去存储在 Redis 中的是
{ "Foo": "A", "Bar": "B" }
但现在我们失去了酒吧,只得到
{ "Foo": "A" }
有什么办法可以让ServiceStack序列化标记有JsonIgnore的属性,还是我们需要回到之前的版本(并且可能永远卡在之前的版本上)?
或者,有没有一种好方法可以让 JSON.NET 在不使用 JsonIgnore 的情况下忽略某些属性?