我有几个 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”类型的未处理异常