sql >> Database >  >> NoSQL >> Redis

het afhandelen van naamruimtewijzigingen tijdens deserialisatie van JSON String

Het formaat van de "$type" is officieel hardgecodeerd om de CLR-naamruimte van het verzendende systeem op te nemen. U kunt dus ofwel:

  1. Hernoem uw CLR-naamruimten zodat ze overeenkomen met die van het verzendende systeem, of

  2. Subklasse de DefaultSerializationBinder en gebruik het om de namen van de CLR-naamruimten te hernoemen tijdens deserialisatie door het in te stellen in de JsonSerializerSettings.Binder .

Het volgende is een eerste stap om dit te doen:

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

Stel vervolgens, wanneer u uw JSON deserialiseert, de Binder . in in de JsonSerializerSettings zoals zo:

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

Het ontleden van de typenaam in het bovenstaande is extreem grof. Ik heb hier een veel slimmere parser gevonden:hoe kan ik generieke typenamen van C# ontleden?. Mogelijk moet u ook de aangepaste Binder uitbreiden om een ​​woordenboek met toewijzingen te hebben.

Evenzo, als u de naamruimtenamen opnieuw moet toewijzen bij serialisatie en werkt in .Net 4.0 of hoger, kunt u BindToName overschrijven .




  1. 3 manieren om een ​​willekeurig voorbeeld van documenten uit een MongoDB-verzameling te retourneren

  2. pymongo - dnspython-module moet zijn geïnstalleerd om mongodb+srv:// URI's te gebruiken

  3. MongoDB-documenten en -verzamelingen visueel beheren

  4. Redis 10x meer geheugengebruik dan data