Как десериализовать BitArray с помощью JsonSerializer?C#

Место общения программистов C#
Ответить
Anonymous
 Как десериализовать BitArray с помощью JsonSerializer?

Сообщение Anonymous »

Я пытаюсь сериализовать и десериализовать объекты в файлы Json в словаре с помощью Json.Net. Сериализация работает отлично, и я вижу все данные в файле. Но когда я пытаюсь десериализовать, не удается заполнить System.Collections.BitArray. BitArrays не поддерживаются должным образом?

Похоже, что файл Json имеет правильные значения и в правильной форме.
Я также просмотрел код, и он правильно создает объект, только не установив значение BitArray. До сих пор он работал правильно для всех объектов, но произошел сбой только после того, как я представил объект с BitArray.

Неудачный объект

Код: Выделить всё

    [DataContract]
public class Chip
{
[DataMember]
public Guid ID { get; set; }

[DataMember]
public BitArray Input { get; set; } //Failing on setting this value
[DataMember]
public BitArray Output { get; set; }

[DataMember]
public List Gates { get; set; }
[DataMember]
public List Chips { get; set; }
[DataMember]
public Dictionary WireDict { get; set; }

[DataMember]
protected BitArray Dirty { get; set; }

protected Chip(int inputs, int outputs)
{
ID = Guid.NewGuid();

Input = new BitArray(inputs, false);
Output = new BitArray(outputs, false);
Dirty = new BitArray(outputs, false);

Gates = new List();
Chips = new List();
WireDict = new Dictionary();
}
}
Код, который я использую для сериализации

Код: Выделить всё

using(StreamWriter file = File.CreateText(filePath))
{
JsonSerializer serializer = new JsonSerializer
{
TypeNameHandling = TypeNameHandling.Auto,
Formatting = Formatting.Indented
};

serializer.Serialize(file, componentsDict);
}
Код, который я использую для десериализации

Код: Выделить всё

using (StreamReader file = File.OpenText(filePath))
{
JsonSerializer serializer = new JsonSerializer();
serializer.TypeNameHandling = TypeNameHandling.Auto;
Dictionary componentsDict = (Dictionary)serializer.Deserialize(file, typeof(Dictionary));
}
Я получаю сообщение об ошибке

Код: Выделить всё

JsonSerializationException: Cannot populate list type System.Collections.BitArray. Path 'a77af562-0e5e-4471-86c5-06857610ae6d.Chip.Input', line 612, position 16.
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, System.Object existingValue, System.String id) (at :0)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType,
И т.д.

Словарь содержит класс, от которого получено множество других классов, но только классы с битовыми массивами не работают.

Подробнее здесь: https://stackoverflow.com/questions/582 ... serializer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»