'da serileştirme yapılandırması Orleans
içinde Orleans serileştirme yapılandırması, genel sistem tasarımının önemli bir parçasıdır. Orleans Makul varsayılanlar sağlasa da, serileştirmeyi uygulamalarınızın gereksinimlerine uyacak şekilde yapılandırabilirsiniz. Konaklar arasında veri göndermek için Newtonsoft.Json Orleans.Serialization ve System.Text.Json gibi diğer seri hale getiricilere temsilci atamayı destekler. Bu uygulamalar tarafından ayarlanan deseni izleyerek diğer seri hale getiriciler için destek ekleyebilirsiniz. Tahıl depolama için en iyisi özel seri hale getiriciyi yapılandırmak için kullanmaktır IGrainStorageSerializer .
Kullanmak için yapılandırma OrleansNewtonsoft.Json
kullanarak Newtonsoft.Json
belirli türleri seri hale getirmek üzere yapılandırmak Orleans için önce Microsoft..Orleans. Serialization.NewtonsoftJson NuGet paketi. Ardından, hangi türlerde sorumlu olacağını belirterek seri hale getiriciyi yapılandırın. Aşağıdaki örnekte, seri hale getiricinin ad alanı içindeki Newtonsoft.Json
Example.Namespace
tüm türlerden sorumlu olacağını belirteceğiz.
siloBuilder.Services.AddSerializer(serializerBuilder =>
{
serializerBuilder.AddNewtonsoftJsonSerializer(
isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});
Yukarıdaki örnekte, çağrısı AddNewtonsoftJsonSerializer kullanılarak değerleri Newtonsoft.Json.JsonSerializer
seri hale getirme ve seri durumdan çıkarma desteği ekler. Benzer yapılandırma, bu türleri işlemesi gereken tüm istemcilerde gerçekleştirilmelidir.
ile GenerateSerializerAttributeOrleans işaretlenmiş türler için, seri hale getirici yerine oluşturulan seri hale getiriciyi Newtonsoft.Json
tercih eder.
Kullanmak için yapılandırma OrleansSystem.Text.Json
Alternatif olarak, türlerinizi seri hale getirmek için kullanmak System.Text.Json
üzere yapılandırmak Orleans için Microsoft..Orleans. Serialization.SystemTextJson NuGet paketi. Ardından, hangi türlerde sorumlu olacağını belirterek seri hale getiriciyi yapılandırın. Aşağıdaki örnekte, seri hale getiricinin ad alanı içindeki System.Text.Json
Example.Namespace
tüm türlerden sorumlu olacağını belirteceğiz.
- Microsoft'u yükleyin.Orleans. Serialization.SystemTextJson NuGet paketi.
- yöntemini kullanarak seri hale getiriciyi AddJsonSerializer yapılandırın.
ile ISiloBuilderetkileşim kurarken aşağıdaki örneği göz önünde bulundurun:
siloBuilder.Services.AddSerializer(serializerBuilder =>
{
serializerBuilder.AddJsonSerializer(
isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});
Dış seri hale getirici sağlayıcıları
Serileştirme yapılandırmasının tüm istemcilerde ve silolarda aynı olduğundan emin olmak önemlidir. Yapılandırmalar tutarsızsa serileştirme hataları oluşabilir.
Uygulayan IExternalSerializer
serileştirme sağlayıcıları, ve GlobalConfiguration özelliği ClientConfiguration kullanılarak SerializationProviderOptions.SerializationProviders belirtilebilir:
// Client configuration
var clientConfiguration = new ClientConfiguration();
clientConfiguration.SerializationProviders.Add(
typeof(FantasticSerializer).GetTypeInfo());
// Global configuration
var globalConfiguration = new GlobalConfiguration();
globalConfiguration.SerializationProviders.Add(
typeof(FantasticSerializer).GetTypeInfo());
Alternatif olarak, xml yapılandırmasında özelliğinin <SerializationProviders />
<Messaging>
altında belirtilebilirler:
<Messaging>
<SerializationProviders>
<Provider type="GreatCompany.FantasticSerializer, GreatCompany.SerializerAssembly" />
</SerializationProviders>
</Messaging>
Her iki durumda da birden çok sağlayıcı yapılandırılabilir. Koleksiyon sıralanır, yani türleri seri hale getirebilen ve B
yalnızca türü A
B
serileştirebilen bir sağlayıcıdan önce belirtilmişse, ikinci sağlayıcı kullanılmaz.