Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

menangani perubahan ruang nama selama deserialisasi JSON String

Format "$type" secara resmi di-hardcode untuk memasukkan namespace CLR dari sistem pengiriman. Jadi, Anda dapat:

  1. Ganti nama ruang nama CLR Anda agar sesuai dengan ruang nama sistem pengirim, atau

  2. Subkelas DefaultSerializationBinder dan gunakan untuk mengganti nama namespace CLR selama deserialisasi dengan menyetelnya di JsonSerializerSettings.Binder .

Berikut ini adalah potongan pertama dalam melakukan ini:

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

Kemudian, saat Anda membatalkan serialisasi JSON, setel Binder di JsonSerializerSettings seperti ini:

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

Jenis penguraian nama di atas sangat kasar. Saya menemukan parser yang jauh lebih pintar di sini:Bagaimana cara mengurai nama tipe generik C #? . Anda mungkin juga perlu memperluas Binder custom khusus untuk memiliki kamus pemetaan.

Demikian pula, jika Anda perlu memetakan ulang nama namespace pada serialisasi, dan bekerja di .Net 4.0 atau lebih tinggi, Anda dapat mengganti BindToName .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara menggunakan SCAN dengan opsi MATCH di Predis

  2. Percobaan Ulang Otomatis

  3. Tambahkan Kedaluwarsa ke Redis Cache

  4. Pulihkan dari koneksi yang terputus di redis pub/sub

  5. Redis:Mengembalikan semua nilai yang disimpan dalam database