我正在尝试使用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;
}
}
}
答案 0 :(得分:3)
您的错误不在阅读器中,而是如何存储值。这样:
var defaultValue = element.Name;
可以改写为
XName defaultValue = element.Name;
稍后你会尝试隐式演员。明确的演员是:
defaultValue = (XName)"Hallo space";
..产生异常。 所以解决方案就是......
var defaultValue = element.Name.ToString();