Проблемы сериализации 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 ниже).

Ошибка 1:

Type 'System.Net.Http.ObjectContent`1[PolicyService.Common.Models.PortalUser]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types.

Ошибка 2:

"Message":"An error has occurred.","ExceptionMessage":"Error getting value from 'ReadTimeout' on 'Microsoft.Owin.Host.SystemWeb.CallStreams.InputStream'.","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 property, JsonContract& memberContract, Object& memberValue)\r\n at ...

Я видел случаи подобных сообщений об ошибках, однако похоже, что большинство из них были решены путем добавления атрибутов DataContract, которые здесь не помогли.

Кто-нибудь еще видел это, или кто-нибудь может помочь пролить свет на проблему?

Я не знаю, является ли это вашей проблемой, но похоже, что вы создаете ответ из ответа ... Вы создаете ответ, а затем, если он не равен нулю, попробуйте создать другой ответ с исходным ответом.

snow_FFFFFF 06.06.2018 17:21

Неловко. Именно в этом и заключалась проблема. Не заметил его для поиска. Я смотрел на тот же кусок кода большую часть сегодняшнего дня. Если вы перепишете это как ответ, я отмечу это как ответ.

Chris Disley 06.06.2018 17:25

готово ... сам был там.

snow_FFFFFF 06.06.2018 17:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
754
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, ваша проблема может заключаться в том, что вы создаете ответ из ответа ... Вы создаете ответ, а затем, если он не равен нулю, попробуйте создать другой ответ с исходным ответом. Итак, я полагаю, что он пытается сериализовать исходный ответ, а не ваш объект.

Другие вопросы по теме