I have a Queue of an abstract class KVP. I queue 2 different objects which inherit from KVP. Everything works fine when I serialize the queue, but since KVP cannot be constructed it fails on deserialization.
If it was a single non generic object I could deserialize as dynamic, but I'm not sure how to deserialize a queue that could hold both events and IDs.
Sample code:
public virtual async Task<bool> LoadFromFile(string FileName, bool addToExistingQueue,bool DeleteFileAfterLoad = true)
        {
            try
            {
                IFile File = await PCLStorage.FileSystem.Current.LocalStorage.GetFileAsync(FileName);
                var serializedText = await File.ReadAllTextAsync();
                var mQueue = JsonConvert.DeserializeObject<Queue<T>>(serializedText,jss);
                if (!addToExistingQueue)
                {
                    _queue = new ConcurrentQueue<T>();
                }
                while (mQueue.Count > 0)
                {
                    _queue.Enqueue(mQueue.Dequeue());
                }
                if (DeleteFileAfterLoad)
                {
                    await File.DeleteAsync();
                }
                return true;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Could not load File. Exception Message: " + ex.Message);
                return false;
            }
        }
        public virtual async Task<bool> WriteToFile(string FileName)
        {
            try
            {
                Debug.WriteLine("Writing File: " + FileName);
                var File = await FileSystem.Current.LocalStorage.CreateFileAsync(FileName, CreationCollisionOption.ReplaceExisting);
                var serializedText = JsonConvert.SerializeObject(_queue.ToList(),jss);
                await File.WriteAllTextAsync(serializedText);
                return true;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Could not write File with exception message: " + ex.Message);
                return false;
            }
        }
 
     
     
    