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
相关产品推荐
相关产品推荐

