检测托管代码中的空[{}] json对象

问题描述 投票:1回答:1

我们的应用程序使用json文件进行配置。

  1. 如果文件包含配置数据,我们会解析它并且一切顺利。
  2. 如果文件有坏数据[{asdf 34453%^ $%dfgdsf}]我们处理得很好
  3. 如果配置文件丢失,那么我们处理。

我想弄清楚的情况是它是否是一个空对象,如[{}]我正在寻找一种可靠的方法,通过检查第一个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 c#-4.0 xml-parsing
1个回答
0
投票

我想我找到了一种处理空物体的方法。我使用有效的json和空json进行测试表明,空对象[{}]仍将返回单个元素,但该元素中没有节点,所以我选择了这个:

//an empty file ( [{}] will return positive for HasElements so we also get 
bool IsEmptyObject = (root.Elements().Nodes().Count() > 0) ? true : false;

我仍然有兴趣听取其他人的贡献。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.