Мы использовали Json.NET сериализовать наши данные вместе с OnDeserialized
атрибутом для выполнения пользовательского кода после десериализации:OnDeserialized атрибут для Protobuf-NET
[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
{
...
}
Теперь мы пытаемся использовать protobuf
вместо JSON.NET
и этот метод не является выполнения. Есть ли другой способ добиться такого поведения с помощью protobuf.net
?
Вот пример того, что не работает:
class Program
{
static void Main(string[] args)
{
RuntimeTypeModel.Default.Add(typeof (Profile), false).Add(1000, "Id").Add(1001, "Text");
var test = new Profile {Id = Guid.NewGuid(), Text = "123"};
using (var memoryStream = new MemoryStream())
{
Serializer.Serialize(memoryStream, test);
memoryStream.Seek(0, SeekOrigin.Begin);
var deserialized = Serializer.Deserialize<Profile>(memoryStream);
Console.WriteLine(deserialized.Text); // should output "changed"
Console.ReadLine();
}
}
}
[ProtoContract]
public class Profile
{
public Guid Id { get; set; }
public string Text { get; set; }
[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
{
Text = "changed";
}
}
Hi Marc! Ваш пример работает, но мой код все еще не работает. Я добавил пример консольного приложения на мой вопрос, чтобы продемонстрировать это. – user1613797
@user в примере, вы отключили автоматическую настройку (ложь). Из-за этого автоматической конфигурации не произошло! Если вы вручную настроите модель, которая включает в себя рассказ о том, какие вызовы вызывать. Для этого есть метод для MetaType. Или просто передайте истину. –
Спасибо, Марк! Я изменил второй параметр на true, и теперь он работает. – user1613797