我有一個裝飾有JsonConverter屬性的類來使用我的自定義轉換器。自定義轉換器的目標是使用一些自定義邏輯對CustomProperty
進行序列化。我決定使用JObject.FromObject
來自動序列化屬性,而不是編寫代碼來序列化所有基本屬性,而是稍後再執行類似o.Remove("CustomProperty")
的操作,然後將自定義序列化成員添加到o
。
但由於課堂用JsonConverter
屬性裝飾,JObject.FromObject
再次調用我的ClassAJsonConverter
,這導致無限遞歸調用。在調用JObject.FromObject
的時候,是否有可能專門告訴json使用它的默認轉換器而不是我自定義的轉換器。當使用JsonConverterAttribute裝飾類時使用默認的JsonSerializer
[Newtonsoft.Json.JsonConverter(typeof(ClassAJsonConverter))]
public class ClassA
{
public string A {get; set;}
public int B {get; set;}
.
//20 some properties
.
public CustomProp CustomProperty {get; set;}
}
public class ClassAJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(ClassA);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
.
var o = JObject.FromObject(value); //Here infinite recurrence occur
.
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
.
.
.
}
}
注:我碰到Recursively call JsonSerializer in a JsonConverter但無法實現它。此外,我不想僅爲這一用途添加對AutoMapper的依賴關係。既然問題已經一年多了,有沒有人找到更好的方法來做到這一點?
在'CanConvert'代碼也可以幫助'''不多說。 –
@LB'CanConvert'沒有太多 'return objectType == typeof(ClassA);' –
@AnkitSinha完美的[XY問題](http://www.perlmonks.org/?node=XY+Problem)例。 – I4V