SSIS序列化美化JSON时如何排除_IsNull后缀的多余字段
解决方法
你可以通过以下两种常用方案实现过滤_IsNull后缀字段的需求:
- 方案1:序列化阶段直接过滤(推荐)
通过自定义Json.NET的契约解析器,在序列化执行前就排除不需要的字段,无需二次处理JSON,性能更高。
自定义契约解析器代码:
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; public class IgnoreIsNullSuffixContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { var allProperties = base.CreateProperties(type, memberSerialization); // 过滤所有名称以_IsNull结尾的属性 return allProperties.Where(prop => !prop.PropertyName.EndsWith("_IsNull")).ToList(); } }
序列化调用代码:
var serializeSettings = new JsonSerializerSettings { Formatting = Formatting.Indented, ContractResolver = new IgnoreIsNullSuffixContractResolver() }; string json = JsonConvert.SerializeObject(Row, serializeSettings);
- 方案2:序列化后二次处理字段
如果已经拿到原始序列化后的JSON字符串,不想修改原有序列化逻辑,可以先解析为J对象后批量移除目标字段:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; // 原有序列化逻辑 string rawJson = JsonConvert.SerializeObject(Row, Formatting.Indented); // 解析为JObject JObject jsonObj = JObject.Parse(rawJson); // 筛选所有需要移除的_IsNull后缀字段 var needRemoveProps = jsonObj.Properties().Where(p => p.Name.EndsWith("_IsNull")).ToList(); // 批量移除 foreach (var prop in needRemoveProps) { prop.Remove(); } // 得到最终美化后的JSON string finalJson = jsonObj.ToString(Formatting.Indented);
内容的提问来源于stack exchange,提问作者marko
相关产品推荐
相关产品推荐

