Конструктор по умолчанию не найден и не сериализуем - PullRequest
1 голос
/ 30 августа 2011

Я столько раз пытался заставить это скомпилировать, я хотел бы иметь массив имен и расширений, которые можно редактировать через дизайнер, но при редактировании через дизайнер выдает ошибку:

Конструктор для типа «Фильтр» не найден.

и для компиляции:

Ошибка генерации кода для свойства «ExtensionList».Ошибка была: «Тип« Фильтр »в сборке» Тестирование, Версия = 1.0.0.0, Культура = нейтральный, PublicKeyToken = null 'не помечен как сериализуемый.'

Кто-нибудь может помочь?Это код, который я использую:

    System.Collections.Generic.List<Filter> InternalExtensions = new System.Collections.Generic.List<Filter>();

    [System.ComponentModel.Description(@"Sets a list of acceptable extensions to view.")]
    public System.Collections.Generic.List<Filter> ExtensionList
    {
        get
        {
            return InternalExtensions;
        }
        set
        {
            InternalExtensions = value;
        }
    }

[Serializable()]
public class Filter : System.Runtime.Serialization.ISerializable
{
    String Name;
    String[] Extensions;

    public Filter()
    {

    }       

    public Filter(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
    {
        info.AddValue("FilterName", Name);
        info.AddValue("FilterExtensions", Extensions);
    }


   public void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
   {
       Name = (String)info.GetValue("FilterName", typeof(String));
       Extensions = (String[])info.GetValue("FilterExtensions", typeof(String[]));
   }
}

1 Ответ

3 голосов
/ 30 августа 2011

Я не уверен, что это все вашей проблемы, но ваша реализация ISerializable неверна.Вы должны заполнить объект в конструкторе и SerializationInfo в GetObjectData:

public Filter(SerializationInfo info, StreamingContext context)
{
   Name = (String)info.GetValue("FilterName", typeof(String));
   Extensions = (String[])info.GetValue("FilterExtensions", typeof(String[]));
}


public void GetObjectData(SerializationInfo info, StreamingContext context)
{
    info.AddValue("FilterName", Name);
    info.AddValue("FilterExtensions", Extensions);
}

Я не ожидал, что это вызовет проблему при компиляции-время хотя ... какой тип генерации кода задействован?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...