servicestack,C#,Session,Serialization,servicestack" /> servicestack,C#,Session,Serialization,servicestack" />

C# ServiceStack会话不';使用JsConfig.ExcludeTypeInfo时不起作用

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,

在AppHost中,我设置了
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