C# ServiceStack会话不';使用JsConfig.ExcludeTypeInfo时不起作用
在AppHost中,我设置了C# ServiceStack会话不';使用JsConfig.ExcludeTypeInfo时不起作用,c#,session,serialization,servicestack,C#,Session,Serialization,servicestack,在AppHost中,我设置了JsConfig.ExcludeTypeInfo=true以防止将类型序列化到响应中(我在一些web服务响应中使用匿名类型) 对/api/auth/credentials进行身份验证时一切正常,但是当有对安全web服务的请求时,GetSession()扩展方法无法从ICacheClient获取IAuthSession,因为正在尝试反序列化到接口(IAuthSession)在Redis中,JSON没有类型信息,因为设置了JsConfig.ExcludeTypeInfo,
JsConfig.ExcludeTypeInfo=true代码>以防止将类型序列化到响应中(我在一些web服务响应中使用匿名类型)
对/api/auth/credentials
进行身份验证时一切正常,但是当有对安全web服务的请求时,GetSession()
扩展方法无法从ICacheClient
获取IAuthSession
,因为正在尝试反序列化到接口(IAuthSession)在Redis中,JSON没有类型信息,因为设置了JsConfig.ExcludeTypeInfo
,所以序列化程序不知道使用哪种具体类型。 如果您使用CustomAuthUserSession
并
JsConfig.Init(new Config {
ExcludeTypeInfo = true
});
解决方案是为需要它的类型启用它,在这种情况下:
JsConfig<CustomAuthUserSession>.IncludeTypeInfo = true;
JsConfig.IncludeTypeInfo=true;
之所以会发生这种情况,是因为ServiceStack允许您使用并持久化您自己的自定义用户会话。它需要使用有效负载持久化\uuu类型信息,以了解将其分解为哪种具体类型
支持任意响应
这是相当罕见的,因为我们只需要在DTO可以支持保存任意类型时才需要这样做,基本上是在使用对象、接口或抽象属性时(即,我们无法从类定义推断类型)。ServiceStack中唯一存在的另一个位置是MQ消息
类型,它允许持久化任何任意主体
使用松散类型的数据结构,而不是匿名类型
默认情况下,ServiceStack仅在需要时添加添加的\u类型信息,尽管理想情况下,您不应该在服务响应中使用匿名类型,这需要偏离默认配置和默认设置
对于非结构化数据,首选使用松散类型的数据结构,如字典
或列表
,因为匿名类型基本上会阻止DTO的反序列化,并防止客户端对服务最终返回的内容有任何了解,这将打破依赖于您的服务的任何静态推断,例如XSDs/WSDLs/SOAP