private ObservableCollection <QrCodeInfo> ReadQrCodeData() { ObservableCollection <QrCodeInfo> data = null; try { using (var stream = m_Drawing.TryOpenStream(STREAM_NAME, AccessType_e.Read)) { if (stream != null) { m_Logger.Log("Reading QR code data", LoggerMessageSeverity_e.Debug); using (var reader = new StreamReader(stream)) { data = m_Serializer.ReadSettings <ObservableCollection <QrCodeInfo> >( reader, new PictureValueSerializer(m_Logger, m_Drawing)); } } } } catch (Exception ex) { m_Logger.Log(ex); } if (data != null) { var usedPictures = new List <IXObject>(); for (int i = data.Count - 1; i >= 0; i--) { if (data[i].Picture == null) { data.RemoveAt(i); m_Logger.Log($"Removed dangling QR code data at index {i}", LoggerMessageSeverity_e.Debug); } //As we serialize names of the features (removing and readding QR code may cause duplication in the data which is not recognized as dangling) else if (usedPictures.Find(p => p.Equals(data[i].Picture)) != null) { data.RemoveAt(i); m_Logger.Log($"Removed duplicate QR code data at index {i}", LoggerMessageSeverity_e.Debug); } else { usedPictures.Add(data[i].Picture); } } } else { data = new ObservableCollection <QrCodeInfo>(); } data.CollectionChanged += OnDataCollectionChanged; Init(data); return(data); }