Redis
 sql >> Baza danych >  >> NoSQL >> Redis

obsługa zmian przestrzeni nazw podczas deserializacji JSON String

Format "$type" jest oficjalnie zakodowany na sztywno, aby uwzględnić przestrzeń nazw CLR systemu wysyłającego. Możesz więc:

  1. Zmień nazwy swoich przestrzeni nazw CLR, aby pasowały do ​​​​systemu wysyłającego lub

  2. Podklasa DefaultSerializationBinder i użyj go do zmiany nazw przestrzeni nazw CLR podczas deserializacji, ustawiając je w JsonSerializerSettings.Binder .

Oto pierwsze cięcie w tym zakresie:

public class NamespaceMappingSerializationBinder : DefaultSerializationBinder
{
    public string FromNamespace { get; set; }

    public string ToNamespace { get; set; }

    public override Type BindToType(string assemblyName, string typeName)
    {
        string fixedTypeName;
        if (FromNamespace != null && ToNamespace != null)
        {
            fixedTypeName = typeName.Replace(FromNamespace, ToNamespace);
        }
        else
        {
            fixedTypeName = typeName;
        }
        var type = base.BindToType(assemblyName, fixedTypeName);
        return type;
    }
}

Następnie, gdy deserializujesz swój JSON, ustaw Binder w JsonSerializerSettings tak:

JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, Binder = new NamespaceMappingSerializationBinder { FromNamespace = "From Namespace", ToNamespace = "Your Namespace" } };

Parsowanie nazw typów w powyższym jest bardzo surowe. Znalazłem o wiele mądrzejszy parser tutaj:Jak przeanalizować nazwy typów ogólnych C#?. Może być również konieczne rozszerzenie niestandardowego Binder mieć słownik mapowań.

Podobnie, jeśli potrzebujesz ponownie zmapować nazwy przestrzeni nazw podczas serializacji i pracujesz w .Net 4.0 lub nowszym, możesz zastąpić BindToName .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Skanowanie Laravel i redis

  2. Dlaczego pojedyncza instancja Jedis nie jest bezpieczna wątkowo?

  3. Co to jest rozproszona blokada Atomic w sterownikach pamięci podręcznych?

  4. Redis — Jak skonfigurować niestandardowe konwersje

  5. Dostęp do zmiennej w wątku rails