我为集合的内部元素编写了一个紧凑的json转换程序
public class CompactConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return serializer.Deserialize(reader);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var formating = writer.Formatting;
writer.Formatting = Formatting.None;
serializer.Serialize(writer, value);
writer.Formatting = formating;
}
}
在我的序列化对象深处的某处有这些项目:
[JsonConverter(typeof(CompactConverter))]
public class DynamicUtilParam
{
public string Name { get; set; }
public int Field { get; set; }
public bool IsDate { get; set; }
public string Comment { get; set; }
[OnSerializing]
internal void OnSerializing(StreamingContext content)
{
if (string.IsNullOrEmpty(this.Comment))
{
this.Comment = null;
}
}
[OnDeserialized]
internal void OnDeserialized(StreamingContext context)
{
if (this.Comment == null)
{
this.Comment = string.Empty;
}
}
}
如果我评论JsonConverterAttribute,一切都可以序列化,但是内部元素并不紧凑。我尝试使用此属性对其进行序列化,结果是“检测到类型为'ConfigurationConverter.DynamicUtilParam'的自引用循环。路径为'UtilParams'。”
serialized = JsonConvert.SerializeObject(config, Formatting.Indented,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore
}
});
原因是什么,我该如何解决?
附言:如果我通过JsonSerializerInternalWriter进行调试,我会发现_serializeStack.Contains(value)为true。