有效地反序列化不可靠的JSON

时间:2013-06-07 05:35:42

标签: windows-phone-8 json.net json-deserialization

我试图从服务器反序列化JSON,有时会忽略某些键/值,这使我无法使用它:

var obj = JsonConvert.Deserialize<Obj>(respString);

我阅读了JSON.net文档并继续进行了他的Linq to JSON反序列化,如下所示:

string respString = await resp.Content.ReadAsStringAsync();
JObject json = JObject.Parse(respString);

...

CustomObject.child.primary_key = int.Parse(obj[i]["primary_key"].ToString());
CustomObject.foreign_key = obj[i]["foreign_key"].ToString();
CustomObject.properties = int.Parse(ojb[i]["properties"].ToString());

try //this is being done a few times throughout the loop
{
    CustomObject.unreliableProperty = obj[i]["xxx"].ToString();
}
Catch { }

一切正常但我偶尔会得到outofmemoryexceptions(来自服务器的JSON非常大)。我尝试从JSON.net实现自定义JsonConverter但是使用嵌套层次结构(3级深度),JsonConverter变得太复杂且难以理解,更不用说维护了。

当我运行内存分析器时,我看到150mb以上的峰值,这将导致应用程序具有OOM异常。在堆部分下,由于字符串分配,我看到30-40%的内存分配由mscorlib完成。另一个问题是在循环过程中,GC持续不断。我现在对它的编写方式感到非常反感,但是我已经达到目的,有人可以帮忙吗?

0 个答案:

没有答案