Alex Rivera | Logout

ProtoBuf.NET not serializing when using DataContract attributes

Asked 2012-09-10T14:46:50.660
9

I'm using the latest version of ProtoBuf on NuGet (2.0.0.480) and it does not serialize types marked with DataContract/DataMember attributes:

[DataContract]
public class Person
{
    [DataMember]
    public string Firstname { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var outputFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "person.dat");

        var person = new Person { Firstname = "ben" };

        using (var fs = new FileStream(outputFile, FileMode.OpenOrCreate)) {
            Serializer.Serialize(fs, person);
        }

        using (var fs = File.OpenRead(outputFile))
        {
            var result = Serializer.Deserialize<Person>(fs);
            Console.WriteLine(result.Firstname);
        }

        Console.ReadLine();
    }
}

However, if I decorate my class using the ProtoBuf specific attributes:

[ProtoContract]
public class Person
{
    [ProtoMember(1)]
    public string Firstname { get; set; }
}

It works as expected.

Edit
Report

1 Answer

12

It needs the Order property to get a unique and reliable key-number:

[DataContract]
public class Person
{
    [DataMember(Order=1)]
    public string Firstname { get; set; }
}
answered 2012-09-10T14:52:29.890

Your Answer