C#使用XmlReader而不是XmlDocument获取额外的空白值

C#使用XmlReader而不是XmlDocument获取额外的空白值,c#,json,xml,json.net,C#,Json,Xml,Json.net,我有一个我不太了解的情况。读取以下XML时: <?xml version="1.0" encoding="utf-8" ?> <Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Countries> <Country> <CountryCode>CN</CountryCode> <CurrentS

我有一个我不太了解的情况。读取以下XML时:

<?xml version="1.0" encoding="utf-8" ?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Countries>
      <Country>
        <CountryCode>CN</CountryCode>
        <CurrentStatus>Active</CurrentStatus>
      </Country>
    </Countries>

    <Countries>
      <Country>
        <CountryCode>AU</CountryCode>
        <CurrentStatus>Cancelled</CurrentStatus>
      </Country>
      <Country>
        <CountryCode>CN</CountryCode>
        <CurrentStatus>Cancelled</CurrentStatus>
      </Country>
      <Country>
        <CountryCode>US</CountryCode>
        <CurrentStatus>Active</CurrentStatus>
      </Country>
    </Countries>

    <Countries xsi:nil="true" />
</Root>
我得到了如下的
json

json1:

{xml:{@version:“1.0”,“@encoding:“utf-8”},Root:{@xmlns:xsi:“,”国家“:{“国家”:{“国家代码”:“CN”,“当前状态”:“活动”},{“国家代码”:“AU”,“当前状态”:“取消”},{“国家代码”:“CN”,“当前状态”:“取消”},{“国家代码”:“JP”,“当前状态”:“取消”},{“国家代码”:“SG”,“当前状态”:“已取消”},{“CountryCode”:“US”,“CurrentStatus”:“Active”}]},{“@xsi:nil”:“true”}]}

json2:

{“Root”:{@xmlns:xsi”:“”“#空格”:[“\n” “,”\n“,“\n”,“\n”],“国家”:[{“#空白”:[“\n”,“\n” “],“国家”:{“#空白”:[“\n”,“\n”,“\n
“],“CountryCode”:“CN”,“CurrentStatus”:“Active”},{“#whitespace”:[“\n
“,”\n“,“\n”,“\n”,“\n”,“\n” “],“国家”:[{”#空白“:[“\n”,“\n”,“\n
“],“CountryCode”:“AU”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[“\n” “,”\n“,“\n
“],“CountryCode”:“CN”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[“\n” “,”\n“,“\n
“],“CountryCode”:“JP”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[”\n “,”\n“,“\n
“],“CountryCode”:“SG”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[”\n “,”\n“,“\n
“],“CountryCode”:“US”,“CurrentStatus”:“Active”}]},{“@xsi:nil”:“true”}]}

为什么
XmlReader
会生成空白,而
XmlDocument
不会生成空白?我认为给定XML值,它们不应该出现在那里。

解决了这个问题:

settings.IgnoreWhitespace = true;

感谢@HenkHolterman和@finrod。

尝试
settings.IgnoreWhitespace=true;
。但基本上你已经有了答案。你真的需要一个阅读器吗,即你的数据>100MB吗?我不知道为什么默认情况下XmlReader会这样做,但我认为你只需要设置为true。@HenkHolterman谢谢。我需要阅读器,因为我的XML需要读取数据时没有根元素,
XmlDocument
将抛出错误。因为我的问题是关于空格的,所以我添加了根元素以显示
XmlDocument
XmlDocument
之间的差异。您看过XElement吗?通常更易于使用。好的,让我们听听忽略设置有帮助完全
 XmlDocument doc = new XmlDocument();
        doc.PreserveWhitespace = false;
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ConformanceLevel = ConformanceLevel.Document;
        settings.IgnoreWhitespace = true;
        XmlReader reader = XmlReader.Create("XMLFile1.xml", settings);
        {

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element )
                {
                    XmlNode node = doc.ReadNode(reader);
                    string json2 = JsonConvert.SerializeXmlNode(node);
                    Console.WriteLine(json2.Trim());
                }
            }
        }
 XmlDocument doc = new XmlDocument();
        doc.PreserveWhitespace = false;
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ConformanceLevel = ConformanceLevel.Document;
        settings.IgnoreWhitespace = true;
        XmlReader reader = XmlReader.Create("XMLFile1.xml", settings);
        {

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element )
                {
                    XmlNode node = doc.ReadNode(reader);
                    string json2 = JsonConvert.SerializeXmlNode(node);
                    Console.WriteLine(json2.Trim());
                }
            }
        }