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

使用Newtonsoft.JsonSerializer时,如何忽略无JsonProperty属性的字段?

如何让Newtonsoft.Json序列化时忽略未标记[JsonProperty]的字段?

当然有办法!最常用也最直接的方案是利用Newtonsoft.Json的**[JsonObject(MemberSerialization.OptIn)]特性**——它的核心作用就是告诉序列化器:只处理那些显式标记了[JsonProperty]的成员,其余未标记的字段/属性一律跳过序列化。

具体用法示例

首先给你的实体类加上[JsonObject(MemberSerialization.OptIn)]特性,然后给需要序列化的成员标记[JsonProperty]:

[JsonObject(MemberSerialization.OptIn)]
public class UserProfile
{
    // 这个成员会被序列化
    [JsonProperty]
    public string DisplayName { get; set; }

    // 可以通过JsonProperty指定序列化后的键名,同时该成员会被序列化
    [JsonProperty("user_email")]
    public string Email { get; set; }

    // 未标记JsonProperty,序列化时会被忽略
    public string InternalId { get; set; }

    // 同样会被忽略
    public DateTime LastLoginTime { get; set; }
}

接下来执行序列化操作:

var profile = new UserProfile
{
    DisplayName = "Jane Smith",
    Email = "jane@example.com",
    InternalId = "abc123",
    LastLoginTime = DateTime.UtcNow
};

string serializedJson = JsonConvert.SerializeObject(profile);
// 最终输出的JSON只会包含 "DisplayName" 和 "user_email" 两个字段

全局配置方案(无需给每个类加特性)

如果你的项目里有很多类都需要这个规则,不想逐个加特性,可以通过全局配置JsonSerializerSettings来实现:

var globalSettings = new JsonSerializerSettings
{
    ContractResolver = new DefaultContractResolver
    {
        // 设置默认的成员搜索范围(公共实例成员)
        DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.Instance,
        // 全局启用OptIn模式
        MemberSerialization = MemberSerialization.OptIn
    }
};

// 使用这个全局配置序列化任意类
string json = JsonConvert.SerializeObject(profile, globalSettings);

这样所有未标记[JsonProperty]的成员都会被自动忽略,不用再给每个类单独加特性啦。

内容的提问来源于stack exchange,提问作者horatius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:28:43