Aracılığıyla paylaş


'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.Jsonbelirli 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.JsonSerializerseri 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.

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 Bserileştirebilen bir sağlayıcıdan önce belirtilmişse, ikinci sağlayıcı kullanılmaz.

Ayrıca bkz.