Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测托管代码中的空[{}]json对象_Json_C# 4.0_Xml Parsing - Fatal编程技术网

检测托管代码中的空[{}]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

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

  • 如果文件有配置数据,我们将对其进行解析,一切都会顺利进行
  • 如果文件有坏数据[{asdf 34453%^$%dfgdsf}],我们处理得很好
  • 如果配置文件丢失,我们将处理它
  • 我试图弄清楚的场景是,如果它是一个空对象,比如[{}],我正在通过检查第一个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;
    }
    

    我想我已经找到了处理空物体的方法。我使用有效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或类似的东西。