【发布时间】:2015-03-23 15:42:19
【问题描述】:
我有一个抽象类 KVP 的队列。我排队从 KVP 继承的 2 个不同的对象。当我序列化队列时一切正常,但由于无法构造 KVP,因此反序列化失败。
如果它是单个非通用对象,我可以将其反序列化为动态对象,但我不确定如何反序列化可以同时保存事件和 ID 的队列。
示例代码:
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;
}
}
【问题讨论】:
-
什么是 KVP?你是说键值对吗?
-
您能否发布一些带有您的问题的示例 json 以便给我们一个更好的主意?
-
@Liam 是的,我创建的抽象类并不重要。
-
我刚刚在另一篇文章中找到了 TypeNameHandling。 stackoverflow.com/questions/20038441/…
标签: c# generics serialization queue json.net