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

sud*_*hir 2 c# xml json

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

问题: 将JSON响应转换为XML时,我收到错误

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

上述错误表示JSON密钥包含空格 [例如:\"POI Items \":[{\"lat \":{\"value \":\"00 \"}],无法转换为XML元件.

是否有任何方法来识别空间只有JSON密钥的["POI项目"]并删除其中的空格?

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

此致,
Sudhir

I4V*_*I4V 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);
Run Code Online (Sandbox Code Playgroud)

.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

输入: {"POI Items":[{"lat":{"value":"00","ab cd":"de fg"}}]}

输出: {"POI_Items":[{"lat":{"value":"00","ab_cd":"de fg"}}]}