问题: 将JSON响应转换为XML时,我收到错误
“无法处理请求。原因:''字符,十六进制 值0x20,不能包含在名称中。“
以上错误表示JSON密钥包含空格 [例如:\“POI Items \”:[{\“lat \”:{\“value \”:\“00 \“}]无法转换为XML元素。
是否有任何方法只识别JSON密钥的[“POI项目”]并删除其中的空格?
还建议任何替代解决方案,以便我们无需更改现有解决方案?
的问候,
的Sudhir
答案 0 :(得分:7)
您可以使用Json.Net并在加载json时替换名称..
JsonSerializer ser = new JsonSerializer();
var jObj = ser.Deserialize(new JReader(new StringReader(json))) as JObject;
var newJson = jObj.ToString(Newtonsoft.Json.Formatting.None);
public class JReader : Newtonsoft.Json.JsonTextReader
{
public JReader(TextReader r) : base(r)
{
}
public override bool Read()
{
bool b = base.Read();
if (base.CurrentState == State.Property && ((string)base.Value).Contains(' '))
{
base.SetToken(JsonToken.PropertyName,((string)base.Value).Replace(" ", "_"));
}
return b;
}
}
输入: {"POI Items":[{"lat":{"value":"00","ab cd":"de fg"}}]}
输出: {"POI_Items":[{"lat":{"value":"00","ab_cd":"de fg"}}]}
答案 1 :(得分:-2)
我建议使用某种Regex.Replace()
在输入字符串中搜索类似的内容:
\"([a-zA-Z0-9]+) ([a-zA-Z0-9]+)\":
然后替换类似的东西(记住缺少的空间):
\"(1)(2)\":
第一对括号包含变量名中的第一个单词,第二对括号表示第二个单词。 :
保证此操作仅在变量名中完成(不在字符串数据中)。 JSON变量名称位于一对\"
内。
也许这不是100%正确但你可以开始搜索。 有关详细信息,请查看MSDN和一些正则表达式示例 http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx