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

Newtonsoft.Json序列化误识别[SQLite.Ignore]属性问题咨询

问题解答

Newtonsoft.Json 13.0.3默认会识别类名为IgnoreAttribute的第三方特性,包括SQLite的[SQLite.Ignore],这是它的设计行为,并非bug。

原因分析

Newtonsoft.Json的默认契约解析器DefaultContractResolver会扫描成员上的所有特性,只要特性类名是IgnoreAttribute(不管所属命名空间),就会将对应属性标记为序列化排除项。SQLite的[SQLite.Ignore]刚好满足这个命名规则,所以被自动排除序列化。

解决办法

有两种可行方案:

  • 方案一:强制指定序列化(轻量)
    给目标属性添加[JsonProperty]特性,显式告诉序列化器要包含该属性,优先级会覆盖[SQLite.Ignore]的排除逻辑:

    [SQLite.Ignore]
    [JsonProperty]
    public string Name { get; set; }
    
  • 方案二:自定义契约解析器(全局)
    如果有大量带[SQLite.Ignore]的属性需要序列化,可以自定义契约解析器,移除SQLite忽略特性的影响:

    public class CustomContractResolver : DefaultContractResolver
    {
        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            JsonProperty property = base.CreateProperty(member, memberSerialization);
            // 检查并取消SQLite.Ignore的排除标记
            var sqliteIgnore = member.GetCustomAttributes(typeof(SQLite.IgnoreAttribute), true).FirstOrDefault();
            if (sqliteIgnore != null)
            {
                property.Ignored = false;
            }
            return property;
        }
    }
    

    使用时在序列化配置中指定该解析器:

    var jsonSettings = new JsonSerializerSettings
    {
        ContractResolver = new CustomContractResolver()
    };
    string jsonString = JsonConvert.SerializeObject(yourInstance, jsonSettings);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:05:55