Я пытаюсь сериализовать и десериализовать объекты в файлы Json в словарь с помощью Json.Net. Сериализация прекрасно работает, и я вижу все данные в файле. Но когда я пытаюсь десериализовать, произойдет сбой при заполнении System.Collections.BitArray. BitArrays не поддерживаются должным образом?
Файл Json имеет правильные значения и правильную форму. Я также прошел через код, и он правильно строит объект, не устанавливая значение BitArray. До сих пор он работал корректно для всех целей, но только после того, как я представил объект с BitArray.
Failing Object
[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<Gate> Gates { get; set; }
[DataMember]
public List<Chip> Chips { get; set; }
[DataMember]
public Dictionary<Guid, List<Wire>> 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<Gate>();
Chips = new List<Chip>();
WireDict = new Dictionary<Guid, List<Wire>>();
}
}
Код, который я использую для сериализации
*
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<Guid, ChipWrapper> componentsDict = (Dictionary<Guid, ChipWrapper>)serializer.Deserialize(file, typeof(Dictionary<Guid, ChipWrapper>));
}
Я получаю ошибку
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 <97722d3abc9f4cf69f9e21e6770081b3>:0)
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType,
Etc ...
Словарь содержит класс, из которого получено множество других классов, но только классы с битовыми массивами дают сбой.