사용자 정의 변환기를 사용하기 위해 JsonConverter 특성으로 꾸며진 클래스가 있습니다. 사용자 지정 변환기의 목적은 사용자 지정 논리를 사용하여 CustomProperty
을 직렬화하는 것입니다. 모든 원시 속성을 serialize하는 코드를 작성하는 대신 JObject.FromObject
을 사용하여 속성을 자동으로 serialize하고 나중에 o.Remove("CustomProperty")
같은 것을 수행 한 다음 사용자 지정 serialize 된 멤버를 o
에 추가하기로 결정했습니다.
그러나 클래스는 JsonConverter
속성으로 꾸며 졌으므로 JObject.FromObject
은 다시 ClassAJsonConverter
을 호출하여 infinte 재귀 호출을합니다. 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에 종속성을 추가하고 싶지 않습니다. 질문이 1 년이 넘은 이래로 누구나 더 좋은 방법을 찾았습니까?
CanConvert''의 코드 '... '이별로 도움이되지 않을 수도 있습니다. –
@LB'CanConvert'는 많지 않습니다 'return objectType == typeof (ClassA); ' –
@AnkitSinha 완벽한 [XY 문제] (http://www.perlmonks.org/?node=XY+Problem) 예. – I4V