JSON.NET 上 class 的 NullValueHandling 设置(通过 JsonConverter 属性)(对于 Azure DocumentDb)

NullValueHandling setting for a class on JSON.NET by JsonConverter attribute (for Azure DocumentDb)

我有几个存储在 Azure DocumentDb 中的 DAO 文件,现在我希望空值不会存储在 DocDb 中,这可以通过属性的 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 属性来实现。但我不想把这样的属性放在每个 属性.

问题是,无法为 Azure DocumentDb API.

使用的 Json 序列化程序设置 JsonSerializerSettings

我认为的方法是在 class 上使用 JsonConverter 属性,然后创建一个自定义 JsonConverter class 将使用标准序列化但更改序列化设置。

那是转换器:

public class CommonJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var token = JObject.ReadFrom(reader);
        return token.ToObject(objectType, serializer);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        serializer.NullValueHandling = NullValueHandling.Ignore;
        var jo = JObject.FromObject(value, serializer);
        jo.WriteTo(writer);
    }
}

但是我开始写Json这样的异常:

A first chance exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll

Additional information: Self referencing loop detected with type 'Infrastructure.Dao.Contacts.PersonDao'. Path ''.

我尝试将 WriteJson 函数更改为:

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var jo = JObject.FromObject(value, new JsonSerializer() { NullValueHandling = NullValueHandling.Ignore });
        jo.WriteTo(writer);
    }

但后来我得到:

An unhandled exception of type 'System.WhosebugException' occurred in Newtonsoft.Json.dll

我通过设置默认的全局设置解决了这个问题:

    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    };