如何将对象从没有序列化的序列化中排除在对象中。
下面是一个简单的类,例如。
class Item : IComponent
{
[JsonProperty(PropertyName = "ID", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
public int ID = 0;
}
如果我序列化项目对象,我会得到以下内容。
{
"Items" : [
{ "$type": "Item" },
{ "$type": "Item", "ID": 1},
{ "$type": "Item", "ID": 2 }
]
}
我想在数组中排除第一个项目对象,因为它没有保存数据。对于我的用例,空的"默认"对象是无用的。我的用例始于预先序列化的预先求解和覆盖数据,因此,空对象确实没有用。
有什么想法如何排除在序列化时没有定义的对象?我找不到处理此问题的ObjectAttribute
或JsonSerializerSettings
。如果需要,我可以做ContractResolver
。
谢谢。
更新:
感谢Sanm2009,但是该方法的问题是您必须告诉对象是否应该进行序列化。但是,如果所有内容都设置为默认值或存在数据集,则需要在序列化时间确定。
感谢布莱恩·罗杰斯(Brian Rogers(,我想我可以使用它(修改了一堆(,并在我的情况下使同样的概念起作用。
更新2:
Brian Rogers的示例效果很好,但是我不得不修改ISEMPTY((方法,因为它没有考虑到已声明的$类型的空求职。
public static bool IsEmpty(JToken token)
{
return (token.Type == JTokenType.Null) ||
(token.Type == JTokenType.Array && !token.HasValues) ||
(token.Type == JTokenType.Object && !token.HasValues) ||
(token.Type == JTokenType.Object && token.Count() == 1 && token["$type"] != null);
}
谢谢大家。我希望有一些简单的东西,例如json.net中的设置,但是哦。
序列化后是否更好地过滤对象?
Items.Where(t => t.GetType().GetProperty("ID")!=null));