craigmoliver
craigmoliver

Reputation: 6562

Serializing objects in C# 4.0, is there a simpler way?

When set up an object for serialization I do the following:

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

It's quite exhausting when there are lots of properties. Is there a simpler or less verbose way of doing this in C# 4.0?

Upvotes: 2

Views: 932

Answers (4)

Ian Mercer
Ian Mercer

Reputation: 39277

You could also consider using DataContract serialization which makes it easy to output JSON or XML if you ever need that.

Upvotes: 2

user203570
user203570

Reputation:

I'd like to add that since your class doesn't implement ISerializable, your custom GetObjectData method may never be called.

Upvotes: 1

Nader Shirazie
Nader Shirazie

Reputation: 10776

You don't need the extra constructor or the GetObjectData method unless you want to customize the serialization mechanism. If you have simple properties, the default serialization mechanism will handle them quite well. All you need is the Serializable attribute, and you're golden.

Upvotes: 11

Hans Passant
Hans Passant

Reputation: 941277

Why are you doing this by hand? BinaryFormatter already knows how to do this automatically. If filtering the fields is important then make another class that just stores the ones that you want to serialize.

Upvotes: 3

Related Questions