Redis
 sql >> база данни >  >> NoSQL >> Redis

обработка на промени в пространството на имена по време на десериализация на JSON низ

Форматът на "$type" е официално твърдо кодиран, за да включва CLR пространството от имена на изпращащата система. Така че можете да:

  1. Преименувайте вашите CLR пространства от имена, за да съответстват на тези на изпращащата система, или

  2. Подклас DefaultSerializationBinder и го използвайте, за да преименувате имената на CLR пространството от имена по време на десериализацията, като го зададете в JsonSerializerSettings.Binder .

Следното е първата стъпка в това:

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;
    }
}

След това, когато десериализирате своя JSON, задайте Binder в JsonSerializerSettings така:

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

Разборът на името на типа в горното е изключително груб. Намерих много по-интелигентен анализатор тук:Как да анализирам имена на общи типове в C#?. Може също да се наложи да разширите персонализирания Binder за да имате речник на съпоставянията.

По същия начин, ако трябва да пренастроите имената на пространството от имена при сериализация и работите в .Net 4.0 или по-нова версия, можете да замените BindToName .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Какви са последиците от деактивирането на клюките, смесването и сърдечния ритъм за работниците на целина?

  2. Spring Data Redis:Redis Pipeline връща винаги нула

  3. Каква е най-добрата стратегия за синхронизиране на Redis данни с MySQL?

  4. Redis - Как да конфигурирате персонализирани преобразувания

  5. Защо в тази програма gevent е направена само една връзка с redis?