JSON.NET 上 class 的 NullValueHandling 设置(通过 JsonConverter 属性)(对于 Azure DocumentDb)
NullValueHandling setting for a class on JSON.NET by JsonConverter attribute (for Azure DocumentDb)
我有几个存储在 Azure DocumentDb 中的 DAO 文件,现在我希望空值不会存储在 DocDb 中,这可以通过属性的 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
属性来实现。但我不想把这样的属性放在每个 属性.
问题是,无法为 Azure DocumentDb API.
使用的 Json 序列化程序设置 JsonSerializerSettings
我认为的方法是在 class 上使用 JsonConverter
属性,然后创建一个自定义 JsonConverter
class 将使用标准序列化但更改序列化设置。
那是转换器:
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);
}
}
但是我开始写Json这样的异常:
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.WhosebugException'
occurred in Newtonsoft.Json.dll
我通过设置默认的全局设置解决了这个问题:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
我有几个存储在 Azure DocumentDb 中的 DAO 文件,现在我希望空值不会存储在 DocDb 中,这可以通过属性的 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
属性来实现。但我不想把这样的属性放在每个 属性.
问题是,无法为 Azure DocumentDb API.
使用的 Json 序列化程序设置JsonSerializerSettings
我认为的方法是在 class 上使用 JsonConverter
属性,然后创建一个自定义 JsonConverter
class 将使用标准序列化但更改序列化设置。
那是转换器:
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);
}
}
但是我开始写Json这样的异常:
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.WhosebugException' occurred in Newtonsoft.Json.dll
我通过设置默认的全局设置解决了这个问题:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};