使用ServiceStack的TypeSerializer进行文件反序列化

时间:2012-12-31 23:47:52

标签: c# json deserialization windows-phone-8 servicestack

我在我的C#项目中使用ServiceStack.Text作为JSON库,我正在尝试使用它TypeSerializer.DeserializeFromString从文件中反序列化字符串。

我有以下代码:

async public static void TryLoad(Action<JsonArrayObjects> Ok, 
    Action<string> Fail, string key, int offset)
{
    try
    {
        var folder = ApplicationData.Current.LocalFolder;
        var stream = await folder.OpenStreamForReadAsync(key);
        var result = await new StreamReader(stream).ReadToEndAsync();

        Debug.WriteLine(result);
        var cacheItem = TypeSerializer.DeserializeFromString<CacheItem>(result);
        if (cacheItem.IsValid(offset) == true) Ok(cacheItem.Data); else Fail(key);
    }
    catch (Exception)
    {
        Fail(key);
    }
}

Debug.WriteLine此处输出正确的JSON字符串,但下一行TypeSerializer.DeserializeFromString会产生异常:

A first chance exception of type 'System.IndexOutOfRangeException' occurred in Unknown Module.  

好像TypeSerializer得到一个空字符串。为什么会发生这种情况?如何解决?

2 个答案:

答案 0 :(得分:2)

如果Json对你的对象有效,这可能也有效:

 var cacheItem = (CacheItem) JsonSerializer.DeserializeFromString(result, typeof (CacheItem));

答案 1 :(得分:0)

通过切换到在这种情况下正常运行的Json.NET解决了问题。