На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Сериализация-Возникла ошибка при отражении типа , Не могу сериализовать экземпляр класса помогите кто чем...
    ExpandedWrap disabled
      [Serializable]
              public class IPzag
              {
                  public BitArray version = new BitArray(4);//номер версии 4 бита
                  public BitArray header_length = new BitArray(4);//Длина заголовка 4 бита
                  public BitArray toS = new BitArray(8);//тип сервиса 8 бит
                  public ushort total_lenght;//Общая длина 16 бит
                  public ushort identification;//Идентификатор пакета 16 бит
                  public BitArray flag = new BitArray(3);//Флаги 3 бита
                  public BitArray fragment_offset = new BitArray(13);//Смещение фрагмента 13 бит
                  public byte ttl;//Время жизни 8 бит Time To Live
                  public byte protocol;//Протокол верхнего уровня 8 бит
                  public ushort checksum;//Контрольная сумма 16 бит
                  public uint sourse_address;//айпишник источника 32 бита
                  public uint destination_adress;//айпишник назначения 32 бита
                
                  
       
       
                  [DisplayName("Номер версии")]
                  [XmlAttribute()]
                  public BitArray Version
                  {
                      get { return version; }
                      set { for (int i = 0; i < 4; i++) version[i] = Convert.ToBoolean(value); }
                  }
       
                  [DisplayName("Длина заголовка")]
                  [XmlAttribute()]
                  public BitArray Header_Length
                  {
                      get { return header_length; }
                      set { for (int i = 0; i < 4; i++) header_length[i] = Convert.ToBoolean(value); }
                  }
       
                  [DisplayName("Тип сервиса")]
                  [XmlAttribute()]
                  public BitArray ToS
                  {
                      get { return toS; }
                      set { for (int i = 0; i < 4; i++) toS[i] = Convert.ToBoolean(value); }
                  }
       
                  [DisplayName("Общая длина")]
                  [XmlAttribute()]
                  public ushort Total_lenght
                  {
                      get { return total_lenght; }
                      set { total_lenght = value; }
                  }
       
                  [DisplayName("Идентификатор пакета")]
                  [XmlAttribute()]
                  public ushort Identification
                  {
                      get { return identification; }
                      set { identification = value; }
                  }
       
                  [DisplayName("Время жизни")]
                  [XmlAttribute()]
                  public byte TTL
                  {
                      get { return ttl; }
                      set { ttl = value; }
                  }
       
                  [DisplayName("IP-Протокол верхнего уровня")]
                  [XmlAttribute()]
                  public byte Protocol
                  {
                      get { return protocol; }
                      set { protocol = value; }
                  }
       
                  [DisplayName("Контрольная сумма")]
                  [XmlAttribute()]
                  public ushort Checksum
                  {
                      get { return checksum; }
                      set { checksum  = value; }
                  }
       
                  [DisplayName("IP-адрес источника")]
                  [XmlAttribute()]
                  public uint Sourse_address
                  {
                      get { return sourse_address; }
                      set { sourse_address = value; }
                  }
       
                  [DisplayName("IP-адрес назначения")]
                  [XmlAttribute()]
                  public uint Destination_adress
                  {
                      get { return destination_adress; }
                      set { destination_adress = value; }
                  }
       
                  [DisplayName("Флаги")]
                  [XmlAttribute()]
                  public BitArray Flag
                  {
                      get { return flag; }
                      set { for (int i = 0; i < 4; i++) fragment_offset[i] = Convert.ToBoolean(value); }
                  }
       
       
                  [DisplayName("Смещение фрагмента")]
                  [XmlAttribute()]
                  public BitArray Fragment_offset
                  {
                      get { return fragment_offset; }
                      set { for (int i = 0; i < 4; i++) fragment_offset[i] = Convert.ToBoolean(value); }
                  }
       
                  public IPzag()
              {
              }
                  
                  
       
              }


    Сериализую собственно так:

    ExpandedWrap disabled
       StreamWriter str = new StreamWriter("C://IP.xml");
                         XmlSerializer slz = new XmlSerializer(packet.GetType());
                        
                        
                         slz.Serialize(str, packet, new XmlSerializerNamespaces(new[] { new XmlQualifiedName("") }));
                         str.Close();


    Вылетает ощибка :
    Дополнительные сведения: Возникла ошибка при отражении типа "IP_протокол.Form1.IPzag".

    Помогите кто чем может,не могу понять в чем дело,не однократно делал сериализацию а тут что то не идет :wall:
      заремарьте все атрибуты "[XmlAttribute()]" и попробуйте.
      Исчезнет ли ошибка?
        попробовал,не работает... :wall:
          Цитата lenferer @
          Вылетает ощибка :
          Дополнительные сведения: Возникла ошибка при отражении типа "IP_протокол.Form1.IPzag".

          Помогите кто чем может,не могу понять в чем дело,не однократно делал сериализацию а тут что то не идет



          Уберите вот этот конструктор (он все равно ничего не делает):

          ExpandedWrap disabled
            public IPzag()
            {
            }


          Добавлено
          Не поможет, проблема в сериализации BitArray, не нравится эта коллекция сериализатору. :wall:

          Добавлено
          Быстрый способ это поправить - сделать из BitArray просто Аrray. Не знаю подойдет ли это Вам.
          Сообщение отредактировано: Vladimir -
            Цитата Vladimir @
            Цитата lenferer @
            Вылетает ощибка :
            Дополнительные сведения: Возникла ошибка при отражении типа "IP_протокол.Form1.IPzag".

            Помогите кто чем может,не могу понять в чем дело,не однократно делал сериализацию а тут что то не идет



            Уберите вот этот конструктор (он все равно ничего не делает):

            ExpandedWrap disabled
              public IPzag()
              {
              }


            Добавлено
            Не поможет, проблема в сериализации BitArray, не нравится эта коллекция сериализатору. :wall:

            Добавлено
            Быстрый способ это поправить - сделать из BitArray просто Аrray. Не знаю подойдет ли это Вам.

            Пробовал его убирать,все также не работает.Он необходим для сериализации-так пишут на многих форумах.я Тоже подозреваю что проблема в BitArray, но просто Array мне не подойдет,у кого то есть еще мысли по этому поводу.... :'(
              Выкидываете все свойства смотрите сериализует или нет, потом добавляете по одному, как ломанется - думаете.
                Цитата SPM @
                Выкидываете все свойства смотрите сериализует или нет, потом добавляете по одному, как ломанется - думаете.

                Попробовал,как и ожидалось при добавление BitArray не сериализует...неужели нет способа сериализовать BitArray??? :'(
                  BitArray ващето сериализуемый. Смотрите как вы его инициализируете, там микрософт что-то про это намекало. поищите по инету, не думаю что ничего нет.
                    Цитата SPM @
                    BitArray ващето сериализуемый.


                    Эта коллекция ВЫГЛЯДИТ как-будто она сериализуется, но на практике выдает фокусы.

                    Добавлено
                    P.S. Уточню, фокусы случаются при ХML сериализации. :yes-sad:

                    Добавлено
                    Цитата lenferer @
                    ...неужели нет способа сериализовать BitArray???


                    Есть: бинарным сериалайзером. ;)
                    XML вроде не очень сложный, сам ХМL документ где-то используется?
                      Мда действительно хитрый он. Ну тогда надо что-то придумывать... как пример делать их не сериализуемыми, а сериализуемыми делать свойства-массивы и как-то хитро гонять между ними. Либо свой BitArray расписать. Либо внедрятся в процесс сериалайза/десериалайза.
                        Цитата Vladimir @
                        XML вроде не очень сложный, сам ХМL документ где-то используется?

                        Да, в дальнейшем необходимо другой программой десериализовать XML файл в экземпляр точно такого же класса...Или загружать все в Память а потом второй программой считывать из памяти....думаю это еще сложнее будет реализовать...

                        Народ,мно кто подскажет еще или идеи кончились???????? :oops:
                        Сообщение отредактировано: lenferer -
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0594 ]   [ 16 queries used ]   [ Generated: 26.07.25, 14:33 GMT ]