У меня есть проблема, из-за которой я не могу проследить происхождение в моем проекте 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 ниже).
Ошибка 1:
Тип 'System.Net.Http.ObjectContent`1 [PolicyService.Common.Models.PortalUser]' не может быть сериализован.Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute.Если тип является коллекцией, попробуйте пометить его с помощью CollectionDataContractAttribute.Сведения о других поддерживаемых типах см. В документации Microsoft .NET Framework.
Ошибка 2:
"Сообщение": "Произошла ошибка.", "ExceptionMessage": "Ошибка при получении значения из ReadTimeout в Microsoft.Owin.Host.SystemWeb.CallStreams.InputStream '. "," ExceptionType ":" Newtonsoft.Json.JsonSerializationException "," StackTrace ":" в Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue (Цель объекта) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues (Автор записи JsonWriter, Значение объекта, JsonContainerContract, член JsonProperty, свойство JsonProperty, JsonContract & memberContract, Object & member \ nVV)1026 *
Я видел случаи подобных сообщений об ошибках, однако, похоже, что большинство из них были решены путем добавления атрибутов DataContract
, которые здесь не помогли.
ИмеетКто-нибудь еще видел это, или кто-нибудь может помочь пролить свет на проблему?