如何在Web API中返回响应时隐藏模型的各个部分?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Web API中返回响应时隐藏模型的各个部分?相关的知识,希望对你有一定的参考价值。

我有这个响应类:

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

    }

如果响应成功,我想只返回issuccess,source,number和not message。但是当它失败时我只想返回issuccess和消息。这可能吗?是否有一个属性标记,可以在值为null / empty时隐藏对象?

答案

要一直忽略,你可以使用[ScriptIgnore],如果你使用System.Web.Script.SerializationJson.Net你可以使用属性[JsonIgnore]

对于条件属性序列化,您可以使用大多数Serializer接受的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);
            }
        }

你可以阅读更多关于这个herehere的信息

另一答案

您可以在模型上使用DataContract / Datamember。

[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; }
} 

填充模型后,请确保根据您的条件,不需要的属性为默认值。在这种情况下,字符串为空。

附加优势:使用数据合同还可以让您遵循C#命名标准,同时保持JSON按预期出现。在上面的代码中说明

以上是关于如何在Web API中返回响应时隐藏模型的各个部分?的主要内容,如果未能解决你的问题,请参考以下文章

返回响应时,Symfony 4.4 转储不输出任何内容

返回响应时,Symfony 4.4 转储不输出任何内容

ajaxSubmit 上传文件 提示下载json处理

收到响应后如何使用 if/else 语句显示 div

如何在模型 Laravel 中返​​回多个自定义值

Flutter Redux 小吃店