2016-06-22 8 views
2

Ich habe ein Beispiel, wo ich ein Objekt in Redis speichern möchte.Verwenden von komplexen Typen in RedisTypedClient (ServiceStack Redis)

class CyPoint 
    { 
     // Fields... 
     private bool _Done; 
     private string _Color; 
     private string _Position; 
     private long _Id; 

     public long Id 
     { 
      get { return _Id; } 
      set 
      { 
       _Id = value; 
      } 
     } 

     public string Position 
     { 
      get { return _Position; } 
      set 
      { 
       _Position = value; 
      } 
     } 

     public string Color 
     { 
      get { return _Color; } 
      set 
      { 
       _Color = value; 
      } 
     } 

     public bool Done 
     { 
      get { return _Done; } 
      set 
      { 
       _Done = value; 
      } 
     } 

    } 

ich diesen Code verwenden die Daten Dies funktioniert

var redisCyPoint = redis.As<CyPoint>(); 
      var cpt = new CyPoint 
      { 
       Id = redisCyPoint.GetNextSequence(), 
       Position = "new Vector3(200, 300, 0)", 
       Color = "new Vector3(.5f, .7f, .3f)", 
      }; 

      redisCyPoint.Store(cpt); 

zu speichern, wie ich Strings bin zu speichern. Aber wenn ich Position und Farbe zu Vector3 ändere (was ist: float, float, float), speichert es nur Nullen. Es scheint, dass der Store nicht mit komplexen Typen arbeiten wird. Ist das eine Einschränkung oder gibt es eine Möglichkeit, dies zu tun?

Antwort

1

Struct's sind serialized as a single scalar string value wie von ToString() zurückgegeben. Sie können custom support for Structs implementieren, indem Sie einen Konstruktor Vector3(string) implementieren, der sich von seinem Wert ToString() selbst auffüllen kann, oder eine statische Methode ParseJson(string) implementieren.

Andernfalls können Sie benutzerdefinierte Serializer geben Sie die Serialisierung zu handhaben, z:

JsConfig<Vector3>.SerializeFn = v => "{0},{1},{2}".Fmt(v.X,v.Y,v.Z); 
JsConfig<Vector3>.DeSerializeFn = s => { 
    var parts = s.Split(','); 
    return new Vector3(parts[0],parts[1],parts[2]); 
}; 
Verwandte Themen