我们有一个使用ServiceStack的应用程序。Redis用于缓存。该应用程序是一个REST API,我们在其中以JSON提供响应。我们使用Newtonsoft JSON。NET来序列化我们的响应,当然还有ServiceStack。Redis使用ServiceStack。文本来序列化/反序列化存储在Redis缓存中的数据。
问题是我们希望在缓存中存储比我们提供给客户端的数据更多的数据。所以我们用JSON.NET中的[JsonIgnore]属性来标记那些我们不想暴露给客户端的属性。这在ServiceStack中非常有效。Redis 4.0.20,但是当我们升级到4.0.30的时候坏了。似乎他们改变了Json序列化器的行为,以尊重Json中的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" }
但是现在我们失去了Bar,只得到
{ "Foo": "A" }
是否有任何方法使ServiceStack序列化与JsonIgnore标记的属性,或者我们需要回到以前的版本(也许被卡在以前的版本永远)?
或者,是否有一个好的方法使JSON。. NET忽略某些属性而不使用JsonIgnore?
虽然我不建议依赖于序列化器之间的不同行为,但我刚刚添加了一个提交,允许您更改使用哪些属性来忽略属性。例如,您可以删除[JsonIgnore]
属性:
JsConfig.IgnoreAttributesNamed = new[] {
typeof(IgnoreDataMemberAttribute).Name //i.e. Remove [JsonIgnore]
};
v4.0.31+现在MyGet上可用。