解析JSON字符串时遇到意外的字符

时间:2016-11-26 03:21:56

标签: json json.net

知道这个JSON字符串有什么问题吗?

"\"iccid\":\"8500000000000000005\",\"msisdn\":\"4485000000005\",\"comment\":null,\"lastSessionStart\":1480120318000,\"lastSessionEnd\":1480120456000,\"simStatus\":\"Live\",\"activated\":true,\"enabled\":true,\"connected\":false,\"usage\":73728}"

我试图通过以下方式取消它:

json = json.Replace("\\\"", ""); 

但我仍然收到此错误:

  

解析值时遇到意外的字符:1。路径   ' lastSessionStart',第1行,第91位。

JSONLint.com称它是一种有效的JSON格式。

1 个答案:

答案 0 :(得分:1)

如果这是你的实际JSON字符串,它看起来像是双序列化的。要获取数据,您需要对其进行两次反序列化:一次获取未转义的JSON,一次获取实际数据。

使用json = json.Replace("\\\"", "");尝试取消对字符串的删除将无法正常工作 - 除了反斜杠之外,实际上会删除所有引号,使JSON无效。

请尝试这样做,其中json是您问题中的字符串:

string unescapedJson = JsonConvert.DeserializeObject<string>(json);
Data data = JsonConvert.DeserializeObject<Data>(unescapedJson);

Data是以下类:

public class Data
{
    public string iccid { get; set; }
    public string msisdn { get; set; }
    public string comment { get; set; }
    public long lastSessionStart { get; set; }
    public long lastSessionEnd { get; set; }
    public string simStatus { get; set; }
    public bool activated { get; set; }
    public bool enabled { get; set; }
    public bool connected { get; set; }
    public int usage { get; set; }
}

小提琴:https://dotnetfiddle.net/DOiSUx