gpt4 book ai didi

c# - 通过 JsonConverter 属性对 JSON.NET 上的类进行 NullValueHandling 设置(对于 Azure DocumentDb)

转载 作者:行者123 更新时间:2023-12-03 04:42:54 25 4
gpt4 key购买 nike

我有几个 DAO 文件,它们存储在 Azure DocumentDb 中,现在我希望 null 值不会存储在 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 上遇到了这样的异常:

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.StackOverflowException' occurred in Newtonsoft.Json.dll

最佳答案

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

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

关于c# - 通过 JsonConverter 属性对 JSON.NET 上的类进行 NullValueHandling 设置(对于 Azure DocumentDb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28499186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com