Есть ли какие-либо API, предоставляемые платформой dot net для преобразования строки или массива байтов в определенный пользователем объект? - PullRequest
0 голосов
/ 19 ноября 2009

Предположим, у меня есть входной массив байт A [50];

Я поместил три разных типа данных в массив как показано ниже

  1. строка длиной 42 байта (преобразована в двоичный файл)
  2. длиной с длиной 4 байта (преобразуется в двоичный код)
  3. float длиной 4 байта (преобразованный в двоичный)

Теперь я определил схему, как показано ниже

    <schemaforparsing>
          <field>
                <name>fieldname1</name>
                <type>string</type>
                <length>42</length>
          </field>

         <field>
               <name>fieldname2</name>
               <type>long</type>
               <length>4</length>
         </field>

         <field>
              <name>fieldname3</name>
               <type>float</type>
              <length>4</length>
         </field>
    </schemaforparsing>

Я хочу проанализировать этот байтовый массив в определенном пользователем объекте. Класс пользовательского объекта должен быть сгенерирован из указанной схемы. Как и в этом случае, класс будет таким, как показано ниже

      classGenerated
      {
           String fieldname1[42];
           long fieldname2;
           float fiedlname3;
      }

Таким образом, в основном я хочу компонент, который будет принимать ввод схемы и на основе этой схемы, после анализа двоичных данных в массиве он будет генерировать объект класса, связанный со схемой транзакции.

Предоставляет ли платформа dot net 3.5 такой компонент?

Ответы [ 3 ]

1 голос
/ 19 ноября 2009

(Отредактировано) В фреймворке нет такого компонента, кроме обычного двоичного сериализатора, который использует свою собственную "схему". Это может быть не так сложно реализовать себя. Я полагаю, что схема говорит вам что-то вроде этого:

  • сначала нужно интерпретировать 42 байта как строку, присвоить полю 'fieldname1'
  • секунда - 4 байта, которые должны быть интерпретированы как длинные, присвоить полю 'fieldname2'
  • ...

Не должно быть слишком сложно.

1 голос
/ 19 ноября 2009

Без контекста это трудный вопрос для ответа - что вы хотите сделать с «определяемым пользователем» объектом?

Если вам нужно иметь возможность создавать объекты во время выполнения с динамическими полями, возможное решение состоит в том, чтобы подождать, пока c # 4 не наберет dynamic, и десериализовать в ExpandoObject, см. ExpandoObject .

1 голос
/ 19 ноября 2009

Ну, это звучит так, как будто вы в основном хотите двоичную сериализацию какой-либо формы.

Обычная встроенная сериализация .NET работает с существующими классами, а не с шаблоном, но лично я не очень заинтересован в этом.

Если вам нужны классы, сгенерированные по шаблону, я могу порекомендовать Буферы протокола - переносимые, компактные, эффективные для сериализации / десериализации. Есть два основных порта C # - мой собственный и один у Марка Гравелла . Конечно, есть и другие форматы двоичной сериализации ... Протабуф - это тот, с которым я больше всего знаком.

...