Json XmlDictionaryReader无法读取包含空格的值

时间:2018-02-19 08:02:54

标签: c# json

我正在尝试使用XmlDictionaryReader创建的JsonReaderWriterFactory.CreateJsonReader读取json文件。只要值(字符串)不包含空格,它就可以正常工作。否则,我得到一个奇怪的XmlException告诉我名字不能包含空格。

访问XElement.Value属性时抛出异常,但真正奇怪的是属性值是可访问的,并在调试器中显示正确的值。

这里发生了什么,这是JSON XmlDictionaryReader中的一个错误吗?

JSON:

{
    "Names": {
        "Test": { "de": "Hallo space" }
    }
}

C#:

// using System;
// using System.Collections.Generic;
// using System.IO;
// using System.Runtime.Serialization;
// using System.Runtime.Serialization.Json;
// using System.Xml;
// using System.Xml.Linq;
// using System.Linq;

using (var inputStream = File.Open(jsonFile, FileMode.Open))
{
    var doc = XDocument.Load(JsonReaderWriterFactory.CreateJsonReader(inputStream, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null));
    foreach (var classNode in doc.Root.Elements())
    {
        foreach (var element in classNode.Elements())
        {
            var defaultValue = element.Name;
            foreach (var desc in element.Descendants())
            {
                if (!desc.HasElements)
                {
                    defaultValue = desc.Value; // throws exception
                    break;
                }
            }
            //var defaultValue = element.Descendants().FirstOrDefault(x => !x.HasElements)?.Value ?? element.Name;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您的错误不在阅读器中,而是如何存储值。这样:

    var defaultValue = element.Name;

可以改写为

    XName defaultValue = element.Name;

稍后你会尝试隐式演员。明确的演员是:

defaultValue = (XName)"Hallo space"; 

..产生异常。 所以解决方案就是......

    var defaultValue = element.Name.ToString();