繁体   English   中英

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

[英]how to validate JSON string before converting to XML in C#

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

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

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

上面的错误表明JSON密钥包含一个空格 [例如:\\“ POI Items \\”:[{\\“ lat \\”:{\\“ value \\”:\\“ 00 \\”}]无法转换为XML元件。

有什么方法可以仅识别JSON密钥的[“ POI Items”]并删除其中的空格?

还建议任何替代解决方案,这样我们就不必更改现有解决方案了吗?

问候,
苏德赫

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

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

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

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

\"(1)(2)\":

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM