Сериализация объектов в C # 4.0, есть ли более простой способ? - PullRequest
2 голосов
/ 02 октября 2010

При настройке объекта для сериализации я делаю следующее:

[Serializable]
public class ContentModel
{
    public int ContentId { get; set; }
    public string HeaderRendered { get; set; }

    public ContentModel()
    {
        ContentId = 0;
        HeaderRendered = string.Empty;
    }

    public ContentModel(SerializationInfo info, StreamingContext ctxt) 
    {
        ContentId = (int)info.GetValue("ContentId", typeof(int));
        HeaderRendered = (string)info.GetValue("HeaderRendered", typeof(string));
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("ContentId ", ContentId);
        info.AddValue("HeaderRendered", HeaderRendered);
    }
}

Это довольно утомительно, когда есть много свойств. Есть ли более простой или менее подробный способ сделать это в C # 4.0?

Ответы [ 4 ]

11 голосов
/ 02 октября 2010

Вам не нужен дополнительный конструктор или метод GetObjectData, если вы не хотите настраивать механизм сериализации. Если у вас есть простые свойства, механизм сериализации по умолчанию будет обрабатывать их довольно хорошо. Все, что вам нужно, это атрибут Serializable, и вы золотой.

3 голосов
/ 02 октября 2010

Почему вы делаете это вручную? BinaryFormatter уже знает, как сделать это автоматически. Если фильтрация полей важна, создайте другой класс, который просто хранит те, которые вы хотите сериализировать.

2 голосов
/ 02 октября 2010

Вы также можете использовать сериализацию DataContract, которая позволяет легко выводить JSON или XML, если вам когда-либо это понадобится.

1 голос
/ 02 октября 2010

Я хотел бы добавить, что, поскольку ваш класс не реализует ISerializable, ваш пользовательский метод GetObjectData может никогда не вызываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...