public static void PersistBitArray <TEnum>(this StatePersister persister, ref BitArray <TEnum> result, [CallerArgumentExpression("result")] string name = "") where TEnum : Enum { persister.BeginObject(name); persister.PersistVersion(1); if (persister.Mode == StatePersistMode.Read) { result.SetAll(false); } var count = (uint)result.NumBitsSet; persister.PersistUInt32(ref count); persister.BeginArray("Items"); if (persister.Mode == StatePersistMode.Read) { var stringToValueMap = Data.Ini.IniParser.GetEnumMap <TEnum>(); for (var i = 0; i < count; i++) { string stringValue = default; persister.PersistAsciiStringValue(ref stringValue); var enumValue = (TEnum)stringToValueMap[stringValue]; result.Set(enumValue, true); } } else { var valueToStringMap = Data.Ini.IniParser.GetEnumMapReverse <TEnum>(); foreach (var setBit in result.GetSetBits()) { var stringValue = valueToStringMap[setBit]; persister.PersistAsciiStringValue(ref stringValue); } } persister.EndArray(); persister.EndObject(); }