Как скрыть части модели при возврате ответа в веб-API? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть этот класс ответа:

public class Response
    {
        public bool isSuccess { get; set; }
        public string source { get; set; }
        public string number { get; set; }
        public string message { get; set; }

    }

, если ответ успешен, я хочу вернуть только Issueccess, источник, номер и не сообщение.но когда это терпит неудачу, я только хочу вернуть Issueccess и сообщение.Это возможно?есть ли тег атрибута, который может скрывать объекты, когда значение равно нулю / пусто?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать DataContract / Datamemeber для вашей модели.

[DataContract]
public class Response
{
    [DataMember(Name = "isSuccess")]
    public bool IsSuccess { get; set; }

    [DataMember(EmitDefaultValue = false, Name = "source")]
    public string Source { get; set; }

    [DataMember(EmitDefaultValue = false, Name = "number")]
    public string Number { get; set; }

    [DataMember(EmitDefaultValue = false, Name = "message")]
    public string Message { get; set; }
} 

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

Дополнительное преимущество: использование контракта на данные также позволит вам следовать стандартам именования C # для ваших свойств, сохраняя при этом ваш JSON, как и ожидалось.показано в коде выше

0 голосов
/ 21 февраля 2019

Чтобы постоянно игнорировать, вы можете использовать [ScriptIgnore], если вы используете System.Web.Script.Serialization для Json.Net, вы можете использовать атрибут [JsonIgnore]

Для условной сериализации свойств вы можете использовать ShouldSerialize{PropertyName}который принят большинством Сериализатора.

Вы можете написать свою модель следующим образом.

 public class Response
        {
            public bool isSuccess { get; set; }
            public string source { get; set; }
            public string number { get; set; }
            public string message { get; set; }
            public bool ShouldSerializemessage()
            {
                return (!isSuccess); 
            }

            public bool ShouldSerializesource()
            {
                return (isSuccess);
            }
            public bool ShouldSerializenumber()
            {
                return (isSuccess);
            }
        }

Вы можете узнать больше об этом здесь и здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...