我想在序列化对象时基于字符串列表删除属性。我尝试使用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
被序列化的方式序列化该对象的最佳方法是什么?
答案 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();