排除没有数据的对象



如何将对象从没有序列化的序列化中排除在对象中。

下面是一个简单的类,例如。

class Item : IComponent
{
    [JsonProperty(PropertyName = "ID", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
    public int ID = 0;
}

如果我序列化项目对象,我会得到以下内容。

{
    "Items" : [
        { "$type": "Item" },
        { "$type": "Item", "ID": 1},
        { "$type": "Item", "ID": 2 }
    ]
}

我想在数组中排除第一个项目对象,因为它没有保存数据。对于我的用例,空的"默认"对象是无用的。我的用例始于预先序列化的预先求解和覆盖数据,因此,空对象确实没有用。

有什么想法如何排除在序列化时没有定义的对象?我找不到处理此问题的ObjectAttributeJsonSerializerSettings。如果需要,我可以做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));

相关内容

  • 没有找到相关文章

最新更新