Я определяю класс модели данных, как показано ниже:
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);
}