【问题标题】:NullValueHandling setting for a class on JSON.NET by JsonConverter attribute (for Azure DocumentDb)通过 JsonConverter 属性对 JSON.NET 上的类进行 NullValueHandling 设置(用于 Azure DocumentDb)
【发布时间】:2015-02-13 12:01:51
【问题描述】:

我有几个 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

附加信息:使用类型检测到自引用循环 '基础设施.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);
    }

然后我得到:

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

【问题讨论】:

    标签: c# json azure json.net azure-cosmosdb


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多