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

时间:2014-07-09 23:58:33

标签: json c#-4.0 xml-parsing

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

  1. 如果文件有配置数据,我们会解析它,一切顺利。
  2. 如果文件有错误数据[{asdf 34453%^ $%dfgdsf}]我们处理得很好
  3. 如果缺少配置文件,我们会处理它。
  4. 我想弄清楚的情况是它是否是一个空对象,例如[{}]我通过检查第一个Xnode,最后一个Xnode,Xattribute ......等东西来寻找可靠的方法因为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;
    }
    

1 个答案:

答案 0 :(得分:0)

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

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

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

由于