EF.NET6中如何排除_Central字段仅保留Central在JSON结果中?
解决JSON序列化时排除_Central字段的三种方法
针对你的场景,有三种常用方法可以实现只保留Central字段、排除_Central字段的JSON序列化效果:
方法一:给_Central添加[JsonIgnore]特性
直接在模型的_Central属性上标记[JsonIgnore]特性,System.Text.Json序列化时会自动忽略该属性:
using System.Text.Json.Serialization; // 需要引入此命名空间 [Column("Central")] [JsonIgnore] // 添加此特性 public byte _Central { get; set; } [NotMapped] public bool Central { get { return _Central != 0; } set { _Central = (byte)(value ? 1 : 0); } }
这种方式简单直接,无需修改序列化逻辑,适合只需要在序列化时忽略该属性的场景。
方法二:通过JsonSerializerOptions动态忽略属性
如果不想修改模型代码,可以在序列化时通过配置JsonSerializerOptions来指定忽略_Central属性:
foreach (GCVendor vendor in vendors) { JsonSerializerOptions jso = new JsonSerializerOptions(); jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; // 配置忽略_Central属性 jso.TypeInfoResolver = new DefaultJsonTypeInfoResolver { Modifiers = { typeInfo => { if (typeInfo.Type == typeof(GCVendor)) { var centralProp = typeInfo.Properties.FirstOrDefault(p => p.Name == "_Central"); if (centralProp != null) { centralProp.ShouldSerialize = _ => false; } } } } }; string jsonString = JsonSerializer.Serialize(vendor, jso); }
这种方式无需改动模型,适合临时或局部需要忽略属性的场景。
方法三:使用DTO(数据传输对象)序列化
推荐使用DTO来分离领域模型和序列化模型,只在DTO中保留需要的字段:
- 定义DTO类:
public class GC VendorDto { // 保留你需要序列化的其他字段,比如No等 public string No { get; set; } public bool Central { get; set; } }
- 查询时直接投影到DTO:
var context = new GC(); var vendors = context.Vendors .Where(s => s.No == "AC/0001") .Select(v => new GC VendorDto { No = v.No, Central = v.Central // 映射其他需要的字段 }) .ToList();
- 序列化DTO:
foreach (var vendorDto in vendors) { JsonSerializerOptions jso = new JsonSerializerOptions(); jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; string jsonString = JsonSerializer.Serialize(vendorDto, jso); }
这种方式解耦了数据库模型和序列化输出,更符合面向对象设计原则,适合复杂业务场景。
内容的提问来源于stack exchange,提问作者Jack Casas
相关产品推荐
相关产品推荐

