Dela via


Serialiseringskonfiguration i Orleans

Konfigurationen av serialisering i Orleans är en viktig del av den övergripande systemdesignen. Även om Orleans det finns rimliga standardinställningar kan du konfigurera serialisering som passar dina appars behov. För att skicka data mellan värdar Orleans.Serialization stöder delegering till andra serialiserare, till exempel Newtonsoft.Json och System.Text.Json. Du kan lägga till stöd för andra serialiserare genom att följa det mönster som anges av dessa implementeringar. För kornlagring är det bäst att använda IGrainStorageSerializer för att konfigurera en anpassad serialiserare.

Konfigurera Orleans för användning Newtonsoft.Json

Om du vill konfigurera Orleans för att serialisera vissa typer med hjälp av Newtonsoft.Jsonmåste du först referera till Microsoft.Orleans. Serialization.NewtonsoftJson NuGet-paket. Konfigurera sedan serialiseraren och ange vilka typer den ska ansvara för. I följande exempel anger vi att serialiseraren Newtonsoft.Json ansvarar för alla typer i Example.Namespace namnområdet.

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

I föregående exempel lägger anropet till AddNewtonsoftJsonSerializer stöd för serialisering och deserialisering av värden med hjälp av Newtonsoft.Json.JsonSerializer. Liknande konfiguration måste utföras på alla klienter som behöver hantera dessa typer.

För typer som är markerade med GenerateSerializerAttribute), Orleans föredrar den genererade serialiseraren framför serialiseraren Newtonsoft.Json .

Konfigurera Orleans för användning System.Text.Json

Du kan också referera till MicrosoftOrleans för att konfigurera Orleans att använda System.Text.Json för att serialisera dina typer. Serialization.SystemTextJson NuGet-paket. Konfigurera sedan serialiseraren och ange vilka typer den ska ansvara för. I följande exempel anger vi att serialiseraren System.Text.Json ansvarar för alla typer i Example.Namespace namnområdet.

Tänk på följande exempel när du interagerar med ISiloBuilder:

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

Externa serialiserarprovidrar

Det är viktigt att se till att serialiseringskonfigurationen är identisk på alla klienter och silor. Om konfigurationerna är inkonsekventa kan serialiseringsfel inträffa.

Serialiseringsproviders som implementerar IExternalSerializer kan anges med hjälp SerializationProviderOptions.SerializationProviders av ClientConfiguration egenskapen och GlobalConfiguration i koden:

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

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

Du kan också ange dem i XML-konfigurationen <SerializationProviders /> under egenskapen <Messaging>:

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

I båda fallen kan flera leverantörer konfigureras. Samlingen sorteras, vilket innebär att om en provider som kan serialisera typer A och B anges före en provider som bara kan serialisera typen B, kommer den senare providern inte att användas.

Se även