传递JSON,反序列化失败,因为反斜杠

时间:2015-12-23 16:07:32

标签: c# json json.net backslash json-deserialization

尝试在两个模块之间传递此对象:

public class Transaction
{
    public string ID { get; set; }
    public string ErrorMessage { get; set; }
    public int ErrorCode { get; set; }
}

序列化:

transaction.ErrorMessage = "temptemptemp";
transaction.ErrorCode = 123;
transaction.ID = "0";
return Ok(JsonConvert.SerializeObject(transaction));

反序列化:

using (WebClient webClient = new WebClient())
{
    string json = webClient.DownloadString(url);
    Transaction transaction = JsonConvert.DeserializeObject<Transaction>(json);
}
在调试窗口中,我看到两个这样的字符串:

    序列化后
  • - {“ID”:“0”,“ErrorMessage”:“temptemptemp”,“ErrorCode”:123}
  • 反序列化前的
  • - “{\”ID \“:\”0 \“,\”ErrorMessage \“:\”temptemptemp \“,\”ErrorCode \“:123}”

所以我得到以下异常:

  

转换值“{”ID“:”0“,”ErrorMessage“:”temptemptemp“,”ErrorCode“:123}”输入'WebService.Transaction'时出错。路径'',第1行,第75位。

1 个答案:

答案 0 :(得分:3)

您正在对transaction对象进行双重序列化。首先,通过手动调用

将其序列化为JSON字符串
var jsonString = JsonConvert.SerializeObject(transaction);

然后将其传递给Ok<T>(T content),其中序列化其传入值:

return Ok(jsonString);

由于传入的值是一个字符串,Ok()return Ok(transaction); 作为字符串文字表示的JSON standard的必需值进行转义。

相反,让asp.net为你序列化它:

return Json(transaction);

如果要强制返回JSON,可以使用Json<T>(T content)

AudioInputStream audioStream = AudioSystem.getAudioInputStream(getClass ().getResourceAsStream ("/res/pop.wav"));