小编Ank*_*nha的帖子

使用JsonConverterAttribute装饰类时使用默认的JsonSerializer

我有一个用JsonConverter属性装饰的类来使用我的自定义转换器.自定义转换器的目的是CustomProperty使用一些自定义逻辑进行序列化.我没有编写代码来序列化所有原始属性,而是决定使用JObject.FromObject自动序列化属性,稍后会做类似的事情o.Remove("CustomProperty")然后添加自定义序列化成员o.
但是因为类是用JsonConverter属性装饰的,所以JObject.FromObject再次调用my ClassAJsonConverter会导致infinte递归调用.在调用时JObject.FromObject,可以专门告诉json使用它的默认转换器而不是我的自定义转换器.

[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 …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json json.net

4
推荐指数
1
解决办法
3290
查看次数

标签 统计

.net ×1

c# ×1

json ×1

json.net ×1

serialization ×1