Delen via


Serialisatieconfiguratie in Orleans

De configuratie van serialisatie in Orleans is een cruciaal onderdeel van het algehele systeemontwerp. Hoewel Orleans er redelijke standaardwaarden worden geboden, kunt u serialisatie zo configureren dat deze voldoet aan de behoeften van uw apps. Voor het verzenden van gegevens tussen hosts ondersteunt Orleans.Serialization het delegeren van andere serializers, zoals Newtonsoft.Json en System.Text.Json. U kunt ondersteuning voor andere serializers toevoegen door het patroon te volgen dat door deze implementaties is ingesteld. Voor graanopslag kunt u het beste een IGrainStorageSerializer aangepaste serializer configureren.

Configureren Orleans voor gebruik Newtonsoft.Json

Als u wilt configureren Orleans dat bepaalde typen worden geserialiseerd met behulp van Newtonsoft.Json, moet u eerst naar Microsoft verwijzen.Orleans Serialization.NewtonsoftJson NuGet-pakket. Configureer vervolgens de serializer, waarbij u opgeeft voor welke typen deze verantwoordelijk is. In het volgende voorbeeld geven we op dat de Newtonsoft.Json serializer verantwoordelijk is voor alle typen in de Example.Namespace naamruimte.

siloBuilder.Services.AddSerializer(serializerBuilder =>
{
    serializerBuilder.AddNewtonsoftJsonSerializer(
        isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});

In het voorgaande voorbeeld voegt de oproep om ondersteuning toe te AddNewtonsoftJsonSerializer voegt voor het serialiseren en deserialiseren van waarden met behulp van Newtonsoft.Json.JsonSerializer. Vergelijkbare configuratie moet worden uitgevoerd op alle clients die deze typen moeten verwerken.

Voor typen die zijn gemarkeerd met GenerateSerializerAttribute), Orleans geeft u de voorkeur aan de gegenereerde serializer via de Newtonsoft.Json serializer.

Configureren Orleans voor gebruik System.Text.Json

Als u wilt configureren Orleans voor het System.Text.Json serialiseren van uw typen, verwijst u naar Microsoft .Orleans. Serialization.SystemTextJson NuGet-pakket. Configureer vervolgens de serializer, waarbij u opgeeft voor welke typen deze verantwoordelijk is. In het volgende voorbeeld geven we op dat de System.Text.Json serializer verantwoordelijk is voor alle typen in de Example.Namespace naamruimte.

Bekijk het volgende voorbeeld bij interactie met de ISiloBuilder:

siloBuilder.Services.AddSerializer(serializerBuilder =>
{
    serializerBuilder.AddJsonSerializer(
        isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});

Externe serialisatieproviders

Het is belangrijk om ervoor te zorgen dat de serialisatieconfiguratie identiek is op alle clients en silo's. Als configuraties inconsistent zijn, kunnen er serialisatiefouten optreden.

Serialisatieproviders die worden geïmplementeerd IExternalSerializer , kunnen worden opgegeven met behulp van de SerializationProviderOptions.SerializationProviders eigenschap van ClientConfiguration en GlobalConfiguration in code:

// Client configuration
var clientConfiguration = new ClientConfiguration();
clientConfiguration.SerializationProviders.Add(
    typeof(FantasticSerializer).GetTypeInfo());

// Global configuration
var globalConfiguration = new GlobalConfiguration();
globalConfiguration.SerializationProviders.Add(
    typeof(FantasticSerializer).GetTypeInfo());

U kunt deze ook opgeven in de XML-configuratie onder de <SerializationProviders /> eigenschap van <Messaging>:

<Messaging>
    <SerializationProviders>
        <Provider type="GreatCompany.FantasticSerializer, GreatCompany.SerializerAssembly" />
    </SerializationProviders>
</Messaging>

In beide gevallen kunnen meerdere providers worden geconfigureerd. De verzameling wordt geordend, wat betekent dat als een provider die typen A kan serialiseren en B wordt opgegeven voor een provider die alleen het type Bkan serialiseren, de laatste provider niet wordt gebruikt.

Zie ook