如何在生成JSON时避免序列化特定字段(附C#类示例)
如何避免序列化C#类中的特定字段
针对你的DataPoint类,结合你已经使用的[DataMember]特性,我给你几个实用的方法来控制JSON序列化时忽略特定字段:
方法1:移除[DataMember]特性
因为你使用的是DataContract序列化体系,默认规则是只有标记了[DataMember]的成员才会被序列化。所以如果某个字段你确定永远不需要序列化,直接删掉它上面的[DataMember]特性即可。
比如你不想序列化X字段,修改后代码如下:
// 移除DataMember特性,序列化时会忽略这个字段 public Nullable<double> X = null; [DataMember(Name = "y")] public Nullable<double> Y = null;
方法2:使用[IgnoreDataMember]特性
如果需要明确标记某个字段不参与序列化(哪怕它之前有[DataMember]),可以给它加上[IgnoreDataMember]特性,这个特性会直接覆盖[DataMember]的序列化规则:
[IgnoreDataMember] [DataMember(Name = "x")] // 即使有这个特性,IgnoreDataMember会让它被忽略 public Nullable<double> X = null;
方法3:针对Newtonsoft.Json(Json.NET)使用[JsonIgnore]
如果你的项目用的是常用的Newtonsoft.Json序列化库,可以用它专属的[JsonIgnore]特性,标记后该字段会被Json.NET忽略:
[JsonIgnore] public Nullable<double> X = null;
这个特性的优先级高于DataContract相关特性,适合用Json.NET的场景。
小建议
另外,你的类里直接用了公共字段,更推荐遵循C#编码规范改成属性形式,序列化行为完全一致,代码可读性更好:
[DataMember(Name = "x")] public double? X { get; set; } = null; [DataMember(Name = "y")] public double? Y { get; set; } = null;
内容的提问来源于stack exchange,提问作者tcode
相关产品推荐
相关产品推荐

