JsConfig <MyClass> .ExcludePropertyNames示例,不适合我

Val*_*Val 2 servicestack servicestack-text

尝试从序列化期间排除模型中的属性.

我使用以下语法:

JsConfig<MyTestClass>.ExcludePropertyNames = new[] { "ShortDescription" };
Run Code Online (Sandbox Code Playgroud)

就在那之后,我有以下内容:

            return     (from o in __someProvider.GetAll() select (new
                      {
                          o.Name,
                          o.ShortDescription
                          o.InsertDate
                      }).TranslateTo<MyTestClass>()).ToList()
Run Code Online (Sandbox Code Playgroud)

但是,一旦从方法返回结果,它仍然包含Json中的"ShortDescription"字段.难道我做错了什么?

Mik*_*ock 7

JsConfig<T>.ExcludePropertyNames似乎只为每种类型检查一次,在静态构造函数TypeConfig<T>.因此,如果您ExcludePropertyNames在服务类中进行配置,就在返回响应之前,可能为时已晚 - 可能已经设置并缓存了TypeConfig属性MyTestClass.我能够重现这一点.

更可靠的替代方法是将所有JsConfig<T>配置移至AppHost设置代码.

如果您确实需要在服务类中执行此操作,例如,如果您只是有条件地排除属性名称,那么另一种方法是确保JsConfig.IncludeNullValues错误(我相信它是默认情况下)并且在您的服务代码中设置ShortDescription为null在适当的时候.