Json.net 序列化为json时删除基于路径的属性

Json.net 序列化为json时删除基于路径的属性,json.net,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; }

我想在序列化对象时删除基于字符串列表的属性。我曾尝试使用
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{
公共条{get;set;}
}
公共类酒吧{
公共int MyProperty{get;set;}
公共int MyProperty2{get;set;}
公共int MyProperty3{get;set;}
}
var remove=新列表{
“Foo.Bar.MyProperty”
}

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

我认为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();
JObject result=JObject.Parse(JsonConvert.SerializeObject(myObject));
foreach(移除中的var条目)
{
作业对象当前=结果;
var propertyChain=entry.Split(“.”.ToList();
对于(变量i=0;i
我认为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();
JObject result=JObject.Parse(JsonConvert.SerializeObject(myObject));
foreach(移除中的var条目)
{
作业对象当前=结果;
var propertyChain=entry.Split(“.”.ToList();
对于(变量i=0;i
不,我说的是JSON。这里解释了这一点:该类只提供“p.PropertyName”,它不提供任何关于路径(如Foo.Bar)或父对象的信息,因此我不能使用。目前不可能,请参阅。(事实上,这可能是重复的。同意吗?)这有一个增强请求,请参阅。不,我说的是JSON。这里对此进行了解释:该类只提供“p.PropertyName”,它不提供任何关于路径(如Foo.Bar)或父对象的信息,因此我无法使用。目前不太可能,请参阅。(事实上,这可能是重复的。同意吗?)。当我的对象是一个列表时,它太慢了。我承认这在规模上会很慢。。。我还没有使用过它,但是使用JSON路径可能会更快,这取决于您的对象结构:这就是我一直在做的事情。问题是性能。当我的对象是一个列表时,它太慢了。我承认这在规模上会很慢。。。我没有使用过它,但使用JSON路径可能会更快,具体取决于您的对象结构: