Похоже, что файл 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
Мобильная версия