0

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

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

对我来说似乎要走的路是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.dll 中发生了“Newtonsoft.Json.JsonSerializationException”类型的第一次机会异常

附加信息:检测到类型为“Infrastructure.Dao.Contacts.PersonDao”的自引用循环。小路 ''。

我试图将 WriteJson 函数更改为:

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

但后来我得到:

Newtonsoft.Json.dll 中出现“System.StackOverflowException”类型的未处理异常

4

1 回答 1

10

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

    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    };
于 2015-02-14T01:52:39.623 回答