Как устранить ошибку идентификатора сборки при сериализации enum в C#? - PullRequest
1 голос
/ 25 марта 2020

Я пытаюсь сериализовать свое собственное перечисление с помощью бинарного форматера, но получаю сообщение об ошибке, в котором говорится, что нет идентификатора сборки. Мое перечисление выглядит так:

[Serializable]
public enum MyEnum{NONE, OPTION1, OPTION2, OPTION3};

Это мой код для сериализации:

public class Binder : SerializationBinder
{
    public override Type BindToType(string assemblyName, string typeName)
    {
        return Type.GetType(typeName);
    }

    public override void BindToName(Type serializedType, out string assemblyName, out string typeName)
    {
        assemblyName = "";
        typeName = serializedType.FullName;
    }
}

public static byte[] GetBytes<T>(this T c)
{
    BinaryFormatter bf = new BinaryFormatter();
    using (MemoryStream m = new MemoryStream())
    {
        bf.Binder = new Binder();
        bf.Serialize(m, c);
        return m.ToArray();
    }
}

Полная ошибка:

Возникло исключение: 'System.Runtime. Serialization.SerializationException 'в mscorlib.dll Произошло необработанное исключение типа' System.Runtime.Serialization.SerializationException 'в mscorlib.dll Нет идентификатора сборки для типа объекта' program.MyEnum '.

1 Ответ

1 голос
/ 26 марта 2020

Поскольку ошибка гласит:

Нет идентификатора сборки для типа объекта 'program.MyEnum'.

Параметр assemblyName BindToName кажется подозрительным.

Быстрый поиск мало что дал, за исключением того, что этот упоминает:

... если вы оставите имя сборки как NULL, нормальное имя сборки будет записано в поток, поэтому мы устанавливаем ненулевое значение (вы можете использовать строку нулевой длины)

Поэтому я предполагаю, что установка assemblyName в null, а не пустая строка, приведет к разрешению привязки для текущей (нормальной?) Сборки.

...