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

C# Json序列化仅保留Level1层级及指定abc对象求助

解决Json.NET序列化只保留指定对象的问题

我懂你的困扰——你本来想只序列化abc对象,结果用了MaxDepth=1还是带出了xyz,对吧?其实这里有个对MaxDepth属性的误解,咱们一步步来解决:

为什么MaxDepth没起作用?

MaxDepth控制的是对象的嵌套层级,而不是筛选同级属性。比如如果你的obj本身包含abc和xyz两个同级的Level1属性,那即使把深度设为1,这两个属性都会被序列化出来——因为它们都是根对象的直接属性,属于同一层级。

最简单的解决方案

直接序列化obj里的abc属性,而不是整个obj:

var json = JsonConvert.SerializeObject(obj.abc, new JsonSerializerSettings() { 
    MaxDepth = 1, 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
});

这样就只会针对abc对象进行序列化,完全不会涉及xyz。

如果无法直接访问abc属性的情况

如果你的obj类型不确定,或者不方便直接取abc,可以用匿名对象来包装你需要的部分:

var json = JsonConvert.SerializeObject(new { abc = obj.abc }, new JsonSerializerSettings() { 
    MaxDepth = 1, 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
});

生成的JSON会以abc为根属性,里面就是你要的内容。

进阶方案(如果是长期需求)

如果需要多次过滤这类对象,可以给不需要序列化的属性加上[JsonIgnore]特性:

public class YourObjectType
{
    public AbcType abc { get; set; }
    
    [JsonIgnore] // 标记这个属性不被序列化
    public XyzType xyz { get; set; }
}

之后直接序列化整个obj就只会得到abc的内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:08:18