使用Json.NET序列化时会忽略特定的数据类型?

msh*_*hwf 5 c# serialization json json.net deserialization

我将JSON对象保存到数据库中,有时它会变得很大(我的对象长度为205,797个字符),我想尽可能地消除大小。这些对象有很多我不需要的GUID字段,如果有一种方法可以忽略序列化的任何GUID类型,则可能有助于消除大小。

这是我的代码,我在应用程序中传递了任何模型类型的对象:

 public static string GetEntityAsJson(object entity)
 {
     var json = JsonConvert.SerializeObject(entity, Formatting.None, new JsonSerializerSettings
     {
         ReferenceLoopHandling = ReferenceLoopHandling.Ignore
     });
     return json;
}
Run Code Online (Sandbox Code Playgroud)

编辑

我不想使用JsonIgnore属性,因为我必须将其添加到这么多的类中,每个类都具有许多GUID属性,我正在寻找一些简单的方法: IgnoreDataType = DataTypes.GUID

Bri*_*ers 5

您可以使用自定义ContractResolver忽略所有类中特定数据类型的所有属性。例如,这是一个忽略所有内容的代码Guids

class IgnoreGuidsResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty prop = base.CreateProperty(member, memberSerialization);
        if (prop.PropertyType == typeof(Guid))
        {
            prop.Ignored = true;
        }
        return prop;
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用解析器,只需将其添加到您的JsonSerializerSettings

var json = JsonConvert.SerializeObject(entity, Formatting.None, new JsonSerializerSettings
{
    ContractResolver = new IgnoreGuidsResolver(),
    ...
});
Run Code Online (Sandbox Code Playgroud)

演示小提琴:https : //dotnetfiddle.net/lOOUfq