c# - 在 C# 中反序列化之前从 JSON 字符串中删除非法字符

标签 c# json json-deserialization servicenow

我收到来自第三方的 JSON 响应,这是我无法控制的。有时此响应会在字符串末尾抛出非法字符。这是正确的示例。

{
    "result": [
        {
            "parent": "",
            "made_sla": "true",
            "caused_by": "",
            "watch_list": "",
            "upon_reject": "cancel",
            "sys_updated_on": "2016-09-13 19:00:01",
            "approval_history": "",
            "category": "SPIN Station"
        }
    ]
}

错误字符串的例子。在这里您终于可以看到它抛出额外的逗号而不是结束。

{
    "result": [
        {
            "parent": "",
            "made_sla": "true",
            "caused_by": "",
            "watch_list": "",
            "upon_reject": "cancel",
            "sys_updated_on": "2016-09-13 19:00:01",
            "approval_history": "",
            "category": "SPIN Station"
        }
    ],

这是我的 C# 代码。谁能告诉我如何在反序列化之前用下面代码中的响应值字符串中的右大括号替换非法逗号

 WebRequest req = WebRequest.Create(@"https://aaaa.service-now.com/api/now/table/incident?sysparm_query=sys_updated_onBETWEENjavascript:gs.dateGenerate('2016-09-10','00:00:00')@javascript:gs.dateGenerate('2016-09-13','23:59:59')");
     req.Method = "GET";
     req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("username:Password"));
     req.ContentType = "application/xml";

     HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
     var responseValue = string.Empty;
     using (var responseStream = resp.GetResponseStream())
     {

          if (responseStream != null)
              using (var reader = new StreamReader(responseStream))
                  responseValue = reader.ReadToEnd();
     }

     JavaScriptSerializer ser = new JavaScriptSerializer();
     ser.MaxJsonLength = 2147483647;
     ser.RegisterConverters(new List<JavaScriptConverter> { new ResultConverter() });
     RootObject ro = ser.Deserialize<RootObject>(responseValue);

最佳答案

我看到您正在连接到 ServiceNow。如果您收到格式错误的 JSON 字符串,那就很奇怪了——我会向 hi.service-now.com 提出请求

如果你确实需要纠正你的那一边,那么在反序列化之前操纵你的 responseValue。

 if (responseValue.Substring(responseValue.Length-2, 2)=="],") {
 responseValue = responseValue.Remove(str.Length -1, 1) + "}";
}

附注我没有测试过 - 您需要仔细查看输入的 JSON 字符串以确保没有尾部空格。

关于c# - 在 C# 中反序列化之前从 JSON 字符串中删除非法字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39538637/

相关文章:

c# - 如何在 C#.net 中读取 Windows XP 中的事件查看器日志

java - 我的类结构应该是什么来解析 GSON 中的 JSON

java - 创建一个 JSONArray

json - 如何在Delphi Xe4中读取相当简单的JSON文件?

c# - 如何使用 JSON.NET 检查 JSON 中缺少的字段

c# - 异常处理循环拼图

c# - 如何将选定的 WP7 强调画笔转换为 HTML 颜色代码?

c# - 如何获取已用特定属性修饰的枚举成员列表

PHP 7.2.14 json_decode 函数对浮点值进行四舍五入

json - 使用 json.Decoder 解码顶级 JSON 数组