我试图从服务器反序列化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持续不断。我现在对它的编写方式感到非常反感,但是我已经达到目的,有人可以帮忙吗?