servicestack,Serialization,servicestack" /> servicestack,Serialization,servicestack" />

Serialization ServiceStack在反序列化器中实现魔术令牌

Serialization ServiceStack在反序列化器中实现魔术令牌,serialization,servicestack,Serialization,servicestack,我想为我的基于ServiceStack的API实现一个神奇的令牌。每当任何值与这个特殊标记匹配时,我都希望在我的应用程序中发出特殊操作的信号。此赋值的理想位置是在SS处理wire格式(JSV、JSON、SOAP等)之后,以及将值映射到a.NET类型之前。目前,我想知道从这样的事情开始的最佳方式。这是我可以在Configure()中连接的东西吗?是不是有什么东西我必须重写并注入?如果您能在这方面提供任何帮助或指导,我们将不胜感激。我不认为这是ServiceStack实现的问题,而是您如何定义DTO

我想为我的基于ServiceStack的API实现一个神奇的令牌。每当任何值与这个特殊标记匹配时,我都希望在我的应用程序中发出特殊操作的信号。此赋值的理想位置是在SS处理wire格式(JSV、JSON、SOAP等)之后,以及将值映射到a.NET类型之前。目前,我想知道从这样的事情开始的最佳方式。这是我可以在
Configure()
中连接的东西吗?是不是有什么东西我必须重写并注入?如果您能在这方面提供任何帮助或指导,我们将不胜感激。

我不认为这是ServiceStack实现的问题,而是您如何定义DTO的问题。鉴于这一要求,据我所知,我会选择这样的方式:

 interface IOverridableDTO
 {
    Object overrideValue(Object value);
 }

 class BaseOverridableDTO : IOverridableDTO
 {
    bool doOverride {get(){return(//results of magic token check)};}

    public Object overrideValue(Object value)
    { if {doOverride} 
           return(null);  // or whatever the override needs to be
       return(value);
    }
 }

 class MyDTO : BaseOverridableDTO
 {
    // override the overrideValue() method, if necessary

    private int myDTOProperty;
    public int? MyDTOProperty {
         get() {return overrideValue((Object)myDTOProperty)}; 
         set(int value) {myDTOProperty = value;}
    }
 }

 // use as follows:
 void DoSomethingWithAnOverridableDTO(BaseOverridableDTO dtoObject)
 { ... }

我不认为这是ServiceStack实现的问题,而是如何定义DTO的问题。鉴于这一要求,据我所知,我会选择这样的方式:

 interface IOverridableDTO
 {
    Object overrideValue(Object value);
 }

 class BaseOverridableDTO : IOverridableDTO
 {
    bool doOverride {get(){return(//results of magic token check)};}

    public Object overrideValue(Object value)
    { if {doOverride} 
           return(null);  // or whatever the override needs to be
       return(value);
    }
 }

 class MyDTO : BaseOverridableDTO
 {
    // override the overrideValue() method, if necessary

    private int myDTOProperty;
    public int? MyDTOProperty {
         get() {return overrideValue((Object)myDTOProperty)}; 
         set(int value) {myDTOProperty = value;}
    }
 }

 // use as follows:
 void DoSomethingWithAnOverridableDTO(BaseOverridableDTO dtoObject)
 { ... }

“只要任何值与此特殊标记匹配”-您所说的“值”到底是什么意思?任何DTO中的任何属性值?是。无论类型、DTO或任何其他限制如何,我都希望允许这个神奇的值作为输入,并根据它的存在触发行为。这就是为什么它需要在SS试图映射到一个类型之前被拦截;我希望数据上的int/bool/which字段能够有这个神奇的字符串值。“只要有任何值匹配这个特殊标记”-你所说的“值”到底是什么意思?任何DTO中的任何属性值?是。无论类型、DTO或任何其他限制如何,我都希望允许这个神奇的值作为输入,并根据它的存在触发行为。这就是为什么它需要在SS试图映射到一个类型之前被拦截;我希望数据上的int/bool/which字段能够有这个神奇的字符串值。