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

Passing JSON, deserialization failed because of backslashs

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

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);
}

在调试 window 中,我看到两个字符串是这样的:

所以我得到以下异常:

Error converting value "{"ID":"0","ErrorMessage":"temptemptemp","ErrorCode":123}" to type 'WebService.Transaction'. Path '', line 1, position 75.

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

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

然后你将它传递给Ok<T>(T content)序列化它的传入值:

return Ok(jsonString);

由于传入值是一个字符串,Ok() 根据 JSON standard 的要求将其转义以表示字符串文字。

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

return Ok(transaction);

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

return Json(transaction);