c# - ASP.NET WebAPI 序列化问题
问题描述
我有一个问题,我无法在我的 WebAPI 项目中追踪其来源。API 一直在工作,但是,在部署时我发现我收到与对象序列化有关的错误,这意味着我需要DataContract
类的DataMember
属性和每个可序列化属性的属性。
我已经应用了这些属性,但是,我仍然看到错误。
显示错误的代码是:
[ResponseType(typeof(PortalUser))]
public HttpResponseMessage Get([FromUri]int userId)
{
var user = Request.CreateResponse(repository.GetById(userId));
if (user != null)
return Request.CreateResponse(user);
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Not found");
}
其中 PortalUser 定义为:
[Serializable]
[DataContract]
public class PortalUser : IUser<string>
{
public PortalUser() { }
[DataMember]
public string Id { get; set; }
[DataMember]
public string EmailAddress { get; set; }
[DataMember]
public string MobileTelephone { get; set; }
[DataMember]
public string Firstname { get; set; }
[DataMember]
public string Surname { get; set; }
[DataMember]
public string Company { get; set; }
[DataMember]
public string HashedPassword { get; set; }
[DataMember]
public string PasswordSalt { get; set; }
[DataMember]
public byte[] AuthenticatorQrCodeImage { get; set; }
[DataMember]
public string AuthenticatorFallbackCode { get; set; }
[DataMember]
public int FailedLoginCount { get; set; }
[DataMember]
public DateTime LastFailedLoginAttempt { get; set; }
[DataMember]
public string ManagerId { get; set; }
[DataMember]
public string UserName { get { return EmailAddress; } set { EmailAddress = value; } }
[DataMember]
public string TwoFactorAuthenticationSecretKey { get; set; }
}
如您所见,我已经尝试添加错误中建议的属性(下面的错误 1)。我还尝试删除XmlMediaFormatter
,然后开始抛出有关无法访问ReadTimeout
流的错误(下面的错误 2)。
错误一:
无法序列化类型“System.Net.Http.ObjectContent`1[PolicyService.Common.Models.PortalUser]”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果该类型是一个集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。
错误2:
"Message":"发生错误。","ExceptionMessage":"从 'Microsoft.Owin.Host.SystemWeb.CallStreams.InputStream' 上的 'ReadTimeout' 获取值时出错。","ExceptionType":"Newtonsoft.Json。 JsonSerializationException","StackTrace":" at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty属性, JsonContract& memberContract, Object& memberValue)\r\n at ...
我见过类似错误消息的实例,但是,听起来大多数这些都是通过添加DataContract
属性来解决的,这在这里没有帮助。
有没有其他人看到这个,或者任何人都可以帮助阐明这个问题?
解决方案
看起来您的问题可能是您正在根据响应创建响应...您创建响应,然后如果不为空,请尝试使用原始响应创建另一个响应。所以,我想它是在尝试序列化原始响应,而不是你的对象。
推荐阅读
- c# - 在 LINQ 表达式中过滤对象 - C#
- python-3.x - 使用函数比较 Python 列以断言错误结束
- javascript - 带有导入的简单 js 的 Webpack 配置
- javascript - 使用map函数从javascript对象中的变量中获取连接字符串
- c# - XUnit 测试 void 方法的最佳方法
- python - 查找多索引中的平均行数并在某个阈值之后删除任何行?
- python - 用两列重塑熊猫数据框中的数据
- c# - 如何使用 blazor 组件重用代码段?
- javascript - 我无法使用 html 和 javascript 在甘特图中动态呈现数据
- html - 如何将标题添加到由 XSLT 样式表转换的 HTML?