You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中保留需要的字段:

  1. 定义DTO类:
public class GC VendorDto
{
    // 保留你需要序列化的其他字段,比如No等
    public string No { get; set; }
    public bool Central { get; set; }
}
  1. 查询时直接投影到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();
  1. 序列化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:40:22