Использование атрибутов OnSerializingAttribute / OnDeserializingAttributes в настраиваемом конвертере - PullRequest
1 голос
/ 11 июля 2020

Я определяю класс модели данных, как показано ниже:

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.");
    }
}

Для класса выше я определил настраиваемый преобразователь, как показано ниже

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);
    }
  }

Когда я использую над пользовательским преобразователем, как показано ниже, атрибуты onXXX (OnSerializingMethod) не реализованы. Есть ли способ включить эти атрибуты при использовании пользовательского преобразователя?

   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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...