传递 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 中,我看到两个字符串是这样的:
- 序列化后 - {"ID":"0","ErrorMessage":"temptemptemp","ErrorCode":123}
- 反序列化前 - "{\"ID\":\"0\",\"ErrorMessage\":\"temptemptemp\",\"ErrorCode\":123}"
所以我得到以下异常:
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);
试图在两个模块之间传递此对象:
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 中,我看到两个字符串是这样的:
- 序列化后 - {"ID":"0","ErrorMessage":"temptemptemp","ErrorCode":123}
- 反序列化前 - "{\"ID\":\"0\",\"ErrorMessage\":\"temptemptemp\",\"ErrorCode\":123}"
所以我得到以下异常:
Error converting value "{"ID":"0","ErrorMessage":"temptemptemp","ErrorCode":123}" to type 'WebService.Transaction'. Path '', line 1, position 75.
您正在双重序列化您的 transaction
对象。首先,您通过手动调用
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);