【问题标题】:How to exclude data members from JSON/XML serialization during runtime如何在运行时从 JSON/XML 序列化中排除数据成员
【发布时间】:2016-05-04 11:31:48
【问题描述】:

我的 web.config 中有一个字符串列表,它描述了允许在我的 web api 中序列化的模型成员的名称(由实体框架生成)。
我该怎么做在运行时设置[IgnoreDataMember] 属性?
这个想法是,不是所有的数据都应该公开,应该公开的配置应该是可配置的,无需重新编译。
到目前为止,我只是将该列表中未包含的成员的所有值设置为null。但是这个解决方案不是最优的,因为例如datetime 类型的成员被序列化为 "0001-01-01T00:00:00",此外,响应包含很多不必要的信息(响应可以增长到 150MB)。所以最好从序列化过程中简单地删除成员。

【问题讨论】:

    标签: c# entity-framework serialization


    【解决方案1】:

    你可以使用属性:

    [XmlIgnore] 用于 XML 或 [JsonIgnore] 用于 JSON。

    例如:

    [XmlIgnore]
    public string MyString { get; set; }
    

    [JsonIgnore]
    public string MyString { get; set; }
    

    希望这会有所帮助。

    【讨论】:

    • 另外,别忘了分别使用System.Xml.SerializationNewtonsoft.Json
    • [IgnoreDataMember] 两者都适用,我知道。但这必须根据配置在运行时设置...
    • 我明白了。您可以编写自己的 JSON 转换器,在运行时使用您的条件。另一个可能有帮助的帖子:here
    【解决方案2】:

    我使用[DataMember(EmitDefaultValue = false)] 解决了这个问题。因此,我所有设置为 null 的属性都不包含在响应中。但是,这不是最好的解决方案,因为现在我无法发送任何空值,而且 swagger 还显示了完整的模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-12
      • 2019-11-18
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 2012-04-27
      • 2017-10-19
      • 1970-01-01
      相关资源
      最近更新 更多