Konfigurace serializace v Orleans
Konfigurace serializace Orleans je klíčovou součástí celkového návrhu systému. I když Orleans poskytuje rozumné výchozí hodnoty, můžete serializaci nakonfigurovat tak, aby vyhovovala potřebám vašich aplikací. Pro odesílání dat mezi hostiteli Orleans.Serialization podporuje delegování na jiné serializátory, jako jsou Newtonsoft.Json a System.Text.Json. Podporu jiných serializátorů můžete přidat podle vzoru nastaveného těmito implementacemi. Pro odstupňované úložiště je nejlepší použít IGrainStorageSerializer ke konfiguraci vlastního serializátoru.
Konfigurace Orleans pro použití Newtonsoft.Json
Chcete-li nakonfigurovat Orleans serializaci určitých typů pomocí Newtonsoft.Json
, musíte nejprve odkazovat na Microsoft.Orleans. Balíček NuGet Serialization.NewtonsoftJson . Potom nakonfigurujte serializátor a určete, za které typy bude zodpovědný. V následujícím příkladu určíme, že Newtonsoft.Json
serializátor bude zodpovědný za všechny typy v Example.Namespace
oboru názvů.
siloBuilder.Services.AddSerializer(serializerBuilder =>
{
serializerBuilder.AddNewtonsoftJsonSerializer(
isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});
V předchozím příkladu volání AddNewtonsoftJsonSerializer přidává podporu pro serializaci a deserializaci hodnot pomocí Newtonsoft.Json.JsonSerializer
. Podobná konfigurace musí být provedena u všech klientů, kteří potřebují tyto typy zpracovat.
U typů, které jsou označeny GenerateSerializerAttribute), Orleans bude upřednostňovat vygenerovaný serializátor před serializátorem Newtonsoft.Json
.
Konfigurace Orleans pro použití System.Text.Json
Alternativně můžete nakonfigurovat Orleans použití System.Text.Json
k serializaci typů, odkazovat na Microsoft.Orleans. Serialization.SystemTextJson NuGet package. Potom nakonfigurujte serializátor a určete, za které typy bude zodpovědný. V následujícím příkladu určíme, že System.Text.Json
serializátor bude zodpovědný za všechny typy v Example.Namespace
oboru názvů.
- Nainstalujte microsoft .Orleans. Serialization.SystemTextJson NuGet package.
- Nakonfigurujte serializátor pomocí AddJsonSerializer metody.
Při interakci s aplikací ISiloBuilderzvažte následující příklad:
siloBuilder.Services.AddSerializer(serializerBuilder =>
{
serializerBuilder.AddJsonSerializer(
isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});
Externí zprostředkovatelé serializátoru
Je důležité zajistit, aby konfigurace serializace byla stejná na všech klientech a sila. Pokud jsou konfigurace nekonzistentní, může dojít k chybám serializace.
Zprostředkovatelé serializace, které implementují IExternalSerializer
, lze zadat pomocí SerializationProviderOptions.SerializationProviders vlastnosti ClientConfiguration a GlobalConfiguration v kódu:
// Client configuration
var clientConfiguration = new ClientConfiguration();
clientConfiguration.SerializationProviders.Add(
typeof(FantasticSerializer).GetTypeInfo());
// Global configuration
var globalConfiguration = new GlobalConfiguration();
globalConfiguration.SerializationProviders.Add(
typeof(FantasticSerializer).GetTypeInfo());
Alternativně je možné je zadat v konfiguraci XML v rámci <SerializationProviders />
vlastnosti <Messaging>
:
<Messaging>
<SerializationProviders>
<Provider type="GreatCompany.FantasticSerializer, GreatCompany.SerializerAssembly" />
</SerializationProviders>
</Messaging>
V obou případech je možné nakonfigurovat více poskytovatelů. Kolekce je seřazena, což znamená, že pokud zprostředkovatel, který může serializovat typy A
a B
je zadán před poskytovatelem, který může pouze serializovat typ B
, pak druhý zprostředkovatel nebude použit.