如何移除JsonElement的属性并保持单行JSON序列化格式?
加载单行JSON、移除指定属性并重新序列化为单行格式的方法
核心问题说明
JsonElement是只读不可变的JSON DOM类型,无法直接调用Remove方法修改它。要实现属性移除,需要使用可变的JSON对象类型:
方案1:使用.NET 6+内置的JsonObject(System.Text.Json)
从.NET 6开始,System.Text.Json引入了可变的JsonObject类型,支持直接修改JSON结构:
internal class Program { static void Main(string[] args) { string inputJson = "{\"Name\":\"Fred\",\"Age\":10,\"RemoveMe\":\"???\"}"; // 反序列化为可变JsonObject var jsonObject = JsonSerializer.Deserialize<JsonObject>(inputJson); // 移除目标属性 jsonObject.Remove("RemoveMe"); // 序列化为无缩进的单行JSON string outputJson = JsonSerializer.Serialize(jsonObject, new JsonSerializerOptions { WriteIndented = false }); Console.WriteLine(outputJson); // 输出:{"Name":"Fred","Age":10} } }
方案2:使用Newtonsoft.Json(Json.NET,兼容所有.NET版本)
如果你的项目依赖Newtonsoft.Json,或者使用的是.NET 5及更早版本,可以用JObject来处理:
using Newtonsoft.Json.Linq; internal class Program { static void Main(string[] args) { string inputJson = "{\"Name\":\"Fred\",\"Age\":10,\"RemoveMe\":\"???\"}"; // 解析JSON为可变JObject var jObject = JObject.Parse(inputJson); // 移除目标属性 jObject.Remove("RemoveMe"); // 序列化为无缩进单行格式 string outputJson = jObject.ToString(Newtonsoft.Json.Formatting.None); Console.WriteLine(outputJson); // 输出:{"Name":"Fred","Age":10} } }
关键注意点
- 不要用
JsonElement做修改操作,它仅适用于只读访问 - 序列化为单行格式时,必须显式设置
WriteIndented = false(System.Text.Json)或Formatting.None(Newtonsoft.Json),避免自动生成缩进换行
内容的提问来源于stack exchange,提问作者jessejbweld
相关产品推荐
相关产品推荐

