1

I define a data model class as below:

public class User
{
    public string UserName { get; set; }

    [OnSerializing()]
    internal void OnSerializingMethod(StreamingContext context)
    {
        Console.WriteLine("This value went into the data file during serialization.");
    }

    [OnSerialized()]
    internal void OnSerializedMethod(StreamingContext context)
    {
        Console.WriteLine("This value was reset after serialization.");
    }

    [OnDeserializing()]
    internal void OnDeserializingMethod(StreamingContext context)
    {
        Console.WriteLine(
        "This value was set during deserialization");
    }

    [OnDeserialized()]
    internal void OnDeserializedMethod(StreamingContext context)
    {
        Console.WriteLine(
        "This value was set after deserialization.");
    }
}

For above class, I defined a custom convertor as below

public class UserConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        User user = (User)value;

        writer.WriteValue(user.UserName);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        User user = new User();
        user.UserName = (string)reader.Value;

        return user;
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(User);
    }
  }

When I use above custom convertor as below, the onXXX (OnSerializingMethod) attributes are not implemented.Is there a way to enable these attributes when using custom convertor?

   static void TestJsonConvertor()
    {
        User user = new User
        {
            UserName = @"domain\username"
        };

        var formatter = new JsonMediaTypeFormatter();
        formatter.SerializerSettings.Converters.Add(new StringEnumConverter());
        formatter.SerializerSettings.Converters.Add(new UserConverter());

        string json = JsonConvert.SerializeObject(user, formatter.SerializerSettings);

        Console.WriteLine(json);
    }
Ishani Gupta
  • 147
  • 1
  • 10
  • You have to call the callback manually from the converter. See: [OnDeserialized callback with JsonConverter](https://stackoverflow.com/a/62265454/3744182). In fact I think this is a duplicate, agree? The answer to that question shows how to get the deserialization callbacks in a generic manner by using Json.NET's contract resolver. – dbc Jul 11 '20 at 00:07

0 Answers0