序列化到json时,根据路径删除属性

时间:2018-11-07 21:13:21

标签: json.net

我想在序列化对象时基于字符串列表删除属性。我尝试使用DefaultContractResolver,但它提供了property.PropertyName,但与路径或父对象无关:

public class Foo {
     public Bar Bar {get;set;}
}

public class Bar {
     public int MyProperty { get;set; }
     public int MyProperty2 { get;set; }
     public int MyProperty3 { get;set; }
}

var remove = new List<string> {
     "Foo.Bar.MyProperty"
}

以不会Foo.Bar.MyProperty被序列化的方式序列化该对象的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

对于这种用例,我认为json.net库中没有任何有用的方法,但是您可以手动进行:

JObject result = JObject.Parse(JsonConvert.SerializeObject(myObject));
foreach (var entry in remove)
{
    JObject current = result;
    var propertyChain = entry.Split(".").ToList();
    for(var i = 0; i < propertyChain.Count; i++)
    {
        if (i < propertyChain.Count - 1)
        {
            current = (JObject) current[propertyChain[i]];
        }
        else 
        {
            current.Remove(propertyChain[i]);
        }
    }
}
var myJson = result.ToString();