Странное поведение сериализации...
От: mDmitriy Россия  
Дата: 19.05.15 15:43
Оценка:
Всем привет!

Есть такой класс (.NET 4.5.1, VS 2013):
    [Serializable]
    public class AttributesRequestPlus : AttributesBase
    {
        public RegistrationConfig RegistrationConfig;

        public AttributesRequestPlus(string[] requestDlls, RegistrationConfig registrationConfig) : base()
        {
            ResponseDlls = requestDlls;
            RegistrationConfig = registrationConfig;
        }

        public AttributesRequestPlus(string requestDll, AttributesResponsePlus attributesResponseDll)
            : this(attributesResponseDll.ResponseDlls, new RegistrationConfig())
        {
            //ResponseDlls = attributesResponseDll.ResponseDlls;

            //RegistrationConfig = new RegistrationConfig();
            RegistrationConfig.InstallationFlags = InstallationFlags.Default | InstallationFlags.FindOrCreateTargetApplication | InstallationFlags.ReportWarningsToConsole;

            RegistrationConfig.AssemblyFile = requestDll;
            RegistrationConfig.ApplicationRootDirectory = Path.GetDirectoryName(requestDll); // устанавливаем каталог компонента как путь dll
            RegistrationConfig.Application = attributesResponseDll.ApplicationName;

            Errors.Add(() => string.IsNullOrEmpty(requestDll), "not request dll");
        }
    }

Объект этого класса передается в другой домен (для чего класс указан как сериализуемый) следующим методом:
        public static bool Create(AttributesRequestPlus attributesPlus, bool mode)
        {
            return Create<OtherDomainRegPlus>(r => r.SetRequests(attributesPlus), r => r.DoWork(mode));
        }

Беда в том, что объект, созданный с помощью первого конструктора, работает без проблем, а созданный с помощью второго — вылетает по следующей ошибке:

An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in Register.Common.ComPlus.dll

Additional information: Тип "Common.Registrations.AttributesRequestPlus+<>c__DisplayClass2" сборки " <тут полное имя сборки> " не помечен как сериализуемый.

Кто-нибудь может объяснить, почему так происходит и как заставить правильно работать второй конструктор?
(с объектами других наследников класса AttributesBase нет никаких проблем при передаче в другой домен)
Спасибо...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.