JsonConverter特性为JSON.NET上的类设置了NullValueHandling(用于Azure Docu



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

问题是,没有任何方法可以为Azure DocumentDb API使用的Json序列化程序设置JsonSerializerSettings

对我来说,方法似乎是在类上使用JsonConverter属性,并创建一个自定义JsonConverter类,该类将使用标准序列化,但要更改序列化设置。

这就是转换器:

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);
    }
}

但我在WriteJson上看到了这样一个例外:

类型的第一次机会例外中出现"Newtonsoft.Json.JsonSerializationException"Newtonsoft.Json.dll

附加信息:检测到类型为的自引用循环'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);
    }

但后来我得到了:

"System.StackOverflowException"类型的未处理异常发生在Newtonsoft.Json.dll 中

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

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

相关内容

  • 没有找到相关文章

最新更新