检测托管代码中的空[{}]json对象
我们的应用程序使用json文件进行配置检测托管代码中的空[{}]json对象,json,c#-4.0,xml-parsing,Json,C# 4.0,Xml Parsing,我们的应用程序使用json文件进行配置 如果文件有配置数据,我们将对其进行解析,一切都会顺利进行 如果文件有坏数据[{asdf 34453%^$%dfgdsf}],我们处理得很好 如果配置文件丢失,我们将处理它 我试图弄清楚的场景是,如果它是一个空对象,比如[{}],我正在通过检查第一个Xnode、最后一个Xnode、Xattribute……寻找一种可靠的方法,因为HasElements将为空对象返回true 请不要建议使用第三方库等。其他人决定不使用 我正在使用的代码: private sta
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;
我仍然有兴趣听到其他人的贡献
谢谢您的配置文件中是否必须有特定的已知元素才能将其视为有效元素?如果是这样的话,为什么不检查一下它的存在呢。它是一个泛型,因此可以在许多不同的场景中在我们的内部库中使用,所以我正在寻找类似FirstNode==null或类似的东西。