如何在C#中将JSON字符串转换为XML之前验证它?

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

问题: 在将JSON响应转换为XML时,我遇到了一个错误

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

上述错误表明JSON键包含一个空格 [例如: "POI Items":[{\"lat\":{\"value\":\"00\"}],这不能被转换为XML元素。

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

另外,请提供任何替代解决方案,以便我们不需要更改现有解决方案?

敬礼,
Sudhir

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"}}]}

难道 cd":"de fg" 不应该也被转换为 cd":"de_fg" 吗? - George Nikolaides
@GeorgeNikolaides 不,正如问题所问:“有没有一种方法可以仅识别JSON键“[POI项]”中的空格并将其删除?” - I4V

-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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接