3
  1. 我将收到 JSON 字符串形式的响应。
  2. 我们有一个用 C# 开发的现有工具,它将接受 XML 格式的输入。
  3. 因此,我将使用 Newtonsoft.JSON 从服务器获得的 JSON 字符串转换为 XML 字符串并传递给工具。

问题: 将 JSON 响应转换为 XML 时,出现错误

“处理请求失败。原因: ' ' 字符,十六进制值 0x20,不能包含在名称中。”

上述错误表示 JSON Key 包含无法转换为 XML的空格[For Example: \"POI Items\":[{\"lat\":{\"value\":\"00\"}]元素。

是否有任何方法可以仅识别 JSON 键的 ["POI Items"] 空格并删除其中的空格?

还建议任何替代解决方案,以便我们无需更改现有解决方案?

问候,
苏迪尔

4

2 回答 2

8

您可以使用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"}}]}

于 2013-08-16T15:00:00.607 回答
-2

我建议使用某种Regex.Replace().
在输入字符串中搜索类似的内容:

\"([a-zA-Z0-9]+) ([a-zA-Z0-9]+)\":

然后替换类似的东西(注意缺少的空间):

\"(1)(2)\":

第一对括号包含变量名中的第一个单词,第二对括号表示第二个单词。:保证此操作将仅在变量名中完成(而不是在字符串数据中)。JSON 变量名称位于一对\"s 中。

也许它不是 100% 正确,但您可以开始搜索。有关详细信息,请查看 MSDN 和一些正则表达式示例
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx

于 2013-08-16T10:59:49.820 回答