【发布时间】:2014-08-15 10:14:40
【问题描述】:
我们有一个应用程序,我们正在使用 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 序列化程序的行为以尊重 JSON.NET (https://github.com/ServiceStack/ServiceStack.Text/pull/420) 中的 JsonIgnore 属性。
如果我们有课程
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 的情况下忽略某些属性?
【问题讨论】:
标签: .net serialization json.net servicestack-text servicestack.redis