检测托管代码中的空[{}] json对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测托管代码中的空[{}] json对象相关的知识,希望对你有一定的参考价值。
我们的应用程序使用json文件进行配置。
- 如果文件包含配置数据,我们会解析它并且一切顺利。
- 如果文件有坏数据[{asdf 34453%^ $%dfgdsf}]我们处理得很好
- 如果配置文件丢失,那么我们处理。
我想弄清楚的情况是它是否是一个空对象,如[{}]我正在寻找一种可靠的方法,通过检查第一个Xnode,最后一个Xnode,Xattribute..something,因为HasElements将返回true为一个空对象。
请不要建议使用第三方库等。不按其他人的决定发生。
我正在使用的代码:
private static bool TryParseJson(MemoryStream msJson)
{
bool IsValid = false;
XElement root;
XmlReader xReader = JsonReaderWriterFactory.CreateJsonReader(msJson, new XmlDictionaryReaderQuotas());
//an empty json file ( [] ) will parse but have no elements hence the elements check.
//a file full of giberish...incorrect json format will fail to parse and throw exception hence the try catch
try
{
root = XElement.Load(xReader);
}
catch
{
return IsValid;
}
//an empty file ( [{}] will return positive for HasElements so we also get ?????
XNode ???? = root.FirstNode;
if (root.HasElements && !???)
{
IsValid = true;
return IsValid;
}
return IsValid;
}
答案
我想我找到了一种处理空物体的方法。我使用有效的json和空json进行测试表明,空对象[{}]仍将返回单个元素,但该元素中没有节点,所以我选择了这个:
//an empty file ( [{}] will return positive for HasElements so we also get
bool IsEmptyObject = (root.Elements().Nodes().Count() > 0) ? true : false;
我仍然有兴趣听取其他人的贡献。
谢谢
以上是关于检测托管代码中的空[{}] json对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?
错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”