Могу ли я сериализовать BitArray в XML? - PullRequest
0 голосов
/ 16 марта 2010

У меня есть бизнес-класс, который мне нужно сериализовать в XML. У него есть свойство BitArray.

Я украсил его [XmlAttribute], но сериализация не удалась с

Чтобы быть XML-сериализуемым, типы, наследуемые от ICollection, должны иметь реализацию Add (System.Boolean) на всех уровнях своей иерархии наследования. System.Collections.BitArray не реализует Add (System.Boolean).

Я не уверен, что его можно сериализовать в XML?

Если бы не то, что было бы эффективным средством сериализации BitArray

Спасибо за внимание

Ответы [ 2 ]

3 голосов
/ 16 марта 2010

Вы не можете напрямую сериализовать BitArray в XML. Причина в том, что для десериализации его вам понадобится метод Add, который BitArray не предоставляет.

Однако вы можете скопировать его в массив, который можно сериализовать:

BitArray ba = new BitArray(128);
int[] baBits = new int[4];  // 4 ints makes up 128 bits

ba.CopyTo(baBits, 0);
// Now serialize the array

Чтобы пойти другим путем, нужно десериализовать массив и вызвать конструктор BitArray:

int[] baBits;  // This is deserialized somehow
BitArray ba = new BitArray(baBits);

Если вы сделаете это, вы захотите, чтобы размер вашего BitArray был кратным размеру слова (т.е. если вы используете массив int, тогда ваш размер BitArray должен быть кратным 32).

0 голосов
/ 16 марта 2010

Как что-то быстрое и грязное, как насчет создания свойства, которое имеет [XmlAttribute], и ​​его получатель возвращает массив, созданный из вашего BitArray, используя статический метод BitArray.CopyTo?

...