我想在WebApi上使用一些身份方法,比如更改密码。
这是身份结果:
public class IdentityResult
{
public IdentityResult();
public static IdentityResult Success { get; }
public bool Succeeded { get; protected set; }
public IEnumerable<IdentityError> Errors { get; }
public static IdentityResult Failed(params IdentityError[] errors);
public override string ToString();
}
如果它在Ok()ActionResult上使用,则会出现错误,因为它有ReferenceLoop。出于这个原因,我创建了一个自定义的IdentityResult:
public class CustomIdentityResult
{
public bool Succeeded { get; protected set; }
public List<IdentityError> Errors { get; }
}
并发送如下实际操作结果:
var model = await _userManager.ChangePasswordAsync(user, currentPassword, newPassword);
var result = JsonConvert.SerializeObject(model, Formatting.Indented,
new JsonSerializerSettings()
{
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
});
return Ok(result);
它返回一个这样的字符串:
"{\n \"Succeeded\": true,\n \"Errors\": []\n}"
但是在反序列化这个字符串之后:
var data = JsonConvert.DeserializeObject<CustomIdentityResult>(response.Content);
它返回Succeeded = false和errors = null。 即使我有一些错误并且Succeeded = false,它也会返回Succeeded = false和errors = null。
反序列化问题在哪里?
感谢。