по некоторым причинам мне нужно управлять процессом сериализации объектов в .NET. Я должен контролировать, что свойства должны быть сериализованы. Этот процесс должен быть динамическим, поэтому, по одному запросу, один набор свойств должен быть сериализован, а другой - другой. Мне любопытно, можно ли реализовать уже существующий механизм, или мне нужно разработать какой-то пользовательский сериализатор?Управляемая сериализация в .NET
1
A
ответ
1
Интерфейс ISerializable
позволяет сделать именно это. В основном, вы контролируете, какие значения добавляются в «сумку свойств» (SerializationInfo
), когда выполняется сериализация. Обратите внимание, что вы даже не ограничены свойствами этого типа, как показано ниже.
public class StackOverflow_10639264
{
[Serializable]
public class MyType : ISerializable
{
public string SerializedAM { get; set; }
public string SerializedPM { get; set; }
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
DateTime now = DateTime.Now;
if (now.Hour < 12)
{
info.AddValue("MyValue", this.SerializedAM);
}
else
{
info.AddValue("MyValue", this.SerializedPM);
info.AddValue("NotAProperty", "Hello");
}
}
}
public static void Test()
{
MemoryStream ms = new MemoryStream();
DataContractSerializer dcs = new DataContractSerializer(typeof(MyType));
dcs.WriteObject(ms, new MyType { SerializedAM = "AM", SerializedPM = "PM" });
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
}
}
Смежные вопросы
- 1. Какая управляемая расширяемость для .NET?
- 2. Чистая управляемая оболочка SQLite NET
- 3. . Сериализация .NET.
- 4. .Net Сериализация
- 5. Сериализация System.Drawing.Color в .NET
- 6. Сериализация JSON в .NET
- 7. Xml Сериализация в .NET
- 8. Когда и как управляемая куча .NET обрабатывается?
- 9. Управляемая библиотека (.NET) с HTML-подобной функциональностью?
- 10. Полностью управляемая общая память .NET-реализации?
- 11. .Net Remoting - Сериализация делегатов
- 12. Сериализация/десериализация Protobuf-net
- 13. Сериализация конфигурации ядра .NET
- 14. потоковая сериализация XML в .net
- 15. Сериализация исключений в .NET 4.5
- 16. Сериализация MsgPack в .Net 2.0
- 17. Монтаж Независимая сериализация в .NET
- 18. OutOfMemoryException в ProtoBuf-Net Сериализация
- 19. .NET Сериализация XML в 2009
- 20. Сериализация XML в C# .NET
- 21. Сериализация .NET словарь
- 22. Книга на .Net Сериализация?
- 23. Управляемая версия Spy ++ Tool?
- 24. IJW: управляемая прокси-структура?
- 25. protobuf-net сериализация без атрибутов
- 26. .net DateTime Сериализация Ошибка десериализации
- 27. .NET A * Оптимизация маршрутизации, сериализация?
- 28. .NET SOAP Сериализация неограниченной последовательности
- 29. protobuf-net: сериализация пустого списка
- 30. Сериализация объекта .NET для JSON
благодарит за быстрый ответ! Похоже, это именно то, что мне нужно! –
еще один вопрос ... как передать свои собственные параметры внутри GetObjectData? Какая хорошая практика? Мне нужно передать туда какой-то объект, который будет описывать, какие свойства должны быть сериализованы ... –
GetObjectData - это метод экземпляра, поэтому он имеет доступ ко всем членам типа, который содержит его (в примере выше, 'MyType'). Если вы хотите определить, что должно быть сериализовано, вы можете сохранить его в некотором поле/свойство в самом типе. – carlosfigueira