使用SWAGGER在Web API文档中不调用ShouldSerialize *方法

时间:2016-08-02 17:24:57

标签: asp.net-web-api json.net swagger

我正在使用Swagger进行Web API文档。 在我的Web API中,我有如下实体:

# Load Datasets
from sklearn.datasets import load_iris
iris = load_iris()
DF_X = pd.DataFrame(iris.data, index = ["%d_%d"%(i,c) for i,c in zip(range(X.shape[0]), iris.target)], columns=iris.feature_names)

# Correlation
DF_corr = DF_X.corr()

# Figure
fig, ax= plt.subplots(ncols=2, figsize=(16,6))
sns.heatmap(DF_corr, annot=True, ax=ax[0])

# Masked Figure
threshold = 0
DF_mask = DF_corr.copy()
DF_mask[DF_mask < threshold] = 0
sns.heatmap(DF_mask, annot=True, ax=ax[1])

# Annotating
Ar_annotation = DF_mask.as_matrix()
Ar_annotation[Ar_annotation == 0] = None
Ar_annotation
# array([[ 1.        ,         nan,  0.87175416,  0.81795363],
#        [        nan,  1.        ,         nan,         nan],
#        [ 0.87175416,         nan,  1.        ,  0.9627571 ],
#        [ 0.81795363,         nan,  0.9627571 ,  1.        ]])
print(DF_mask.shape, Ar_annotation.shape)
# (4, 4) (4, 4)

sns.heatmap(DF_mask, annot=Ar_annotation, fmt="")

# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我使用DerivedEntity1作为Web API方法的输入参数,并生成了swagger文档。

在此之前它很好,但问题是,该文档中的DerivedEntity1 JSON字符串显示BaseEntProp1和&amp; BaseEntProp2应该被排除在外。有人可以帮助我如何排除这些吗?

注意: 1. DerivedEntity1的DerEntProp1属性被正确排除。 2.只是为了确认,在生成文档后的启动方法中,我有以下硬编码:

public class BaseEntity
{
    public string BaseEntProp1{get;set;}
    public string BaseEntProp2{get;set;}

    public virtual bool ShouldSerializeBaseEntProp1()
    {
         return true;
    }

    public virtual bool ShouldSerializeBaseEntProp1()
    {
         return true;
    }
}

public class DerivedEntity1 : BaseEntity
{
    [JsonIgnore]
    public string DerEntProp1{get;set;}

    public string DerEntProp2{get;set;}

    public override bool ShouldSerializeBaseEntProp1()
    {
         return false;
    }

    public override bool ShouldSerializeBaseEntProp1()
    {
         return false;
    }
}

以上测试通过,即tempJson没有BaseEntProp1&amp; BaseEntProp2。所以,我怀疑SWAGGER无法调用正确的ShouldSerialize *方法。任何帮助都非常感谢。

由于

1 个答案:

答案 0 :(得分:0)

最后,我以不同的方式解决了它,因为问题与Swagger无关。

我已经使用虚拟属性创建了基本抽象类。在派生类中,我重载了这些属性并用JsonIgnore属性修饰。这解决了我的问题。