簡體   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