Akka.net Hyperion IgnoringDataMember

Я использую akka.net в схеме кластера. (n) узлы обработки, в настоящее время 1 маяк.

Один из пакетов, который перемещается по сети, предоставляет информацию о языке.

    /// <summary>
/// Define scored a suite of token info
/// </summary>
/// <seealso cref="Hammer.Immutable.ImmutableObject" />
[DataContract]
public sealed class TokenSuite : ImmutableObject, IIdItem
{
    #region Ctor

    /// <summary>
    /// Initializes a new instance of the <see cref="TokenSuite"/> class.
    /// </summary>
    public TokenSuite(Guid id, string langCode)
        : base(id, langCode)
    {
        this.Id = id;
        this.LangCode = langCode;

        if (!string.IsNullOrEmpty(langCode))
            LangInfo = CultureInfo.GetCultureInfoByIetfLanguageTag(langCode);
    }

    #endregion

    #region Properties

    /// <summary>
    /// Gets the identifier.
    /// </summary>
    [DataMember]
    public Guid Id { get; }

    /// <summary>
    /// Gets the main language code.
    /// </summary>
    [DataMember]
    public string LangCode { get; }

    /// <summary>
    /// Gets the lang information.
    /// </summary>
    [IgnoreDataMember]
    public CultureInfo LangInfo { get; }


    #endregion

В локальном режиме проблем нет, но когда он проходит через сеть (сериализованный), у меня возникает эта проблема на маяке: Проблема LightHouse

Чтение ошибки кажется исходящим от объекта CultureInfo, но это флаг, который следует игнорировать в сериализациях.

Я использую Akka версии 1.3.5, Hyperion 0.9.8, Akka.Serialization.Hyperion 1.3.2-beta54.

Я пытаюсь сериализовать локально, и это работает:

var serializer = Context.System.Serialization.FindSerializerForType(typeof(TokenSuite));
var data = serializer.ToBinary(result);
var rtoObjectBack = serializer.FromBinary<TokenSuite>(data);

Есть идеи ?


person Mickael Thumerel    schedule 06.03.2018    source источник


Ответы (1)


Hyperion не использует атрибуты контракта данных. Это также означает, что [IgnoreDataMember] не будет учитываться.

Вероятно, это не удается при попытке десериализовать объект CultureInfo, который вы предоставили. Вы всегда можете попытаться преобразовать это в строку и решить после десериализации.

person Bartosz Sypytkowski    schedule 06.03.2018