9. DECORATE CLASS
[ProtoContract]
class Person {
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public string Name {get;set:}
[ProtoMember(3)]
public Address Address {get;set;} } [ProtoContract]
class Address {
[ProtoMember(1)]
public string Line1 {get;set;}
[ProtoMember(2)]
public string Line2 {get;set;}
}
9
10. SERIALIZE DATA
var person = new Person {
Id = 12345, Name = "Fred",
Address = new Address {
Line1 = "Flat 1",
Line2 = "The Meadows"
}
};
using (var file = File.Create("person.bin")) {
Serializer.Serialize(file, person);
} 10
13. PROTOCONTRACT
[ProtoContract]
class Person {
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public string Name {get;set:}
[ProtoMember(3)]
public Address Address {get;set;} } [ProtoContract]
class Address {
[ProtoMember(1)]
public string Line1 {get;set;}
[ProtoMember(2)]
public string Line2 {get;set;}
}
13
15. PROTOCONTRACT
[ProtoContract(SkipConstructor = true, ImplicitFields =
ImplicitFields.AllFields)]
class Person {
public string Name { get; set; }
public Person(string name) {
Name = name;
}
[ProtoAfterDeserialization]
void Validate() {
if (string.IsNullOrEmpty(Name))
throw new Exception("Empty name");
}
}
15
20. SERIALIZE /DESERIALIZE TEXT
private static string SerializeToText<T>(T obj) {
using (var ms = new MemoryStream(1024)) {
SerializeToStream(obj, ms);
return Convert.ToBase64String(ms.ToArray());
}
}
private static T DeSerializeFromText<T>(string text) {
var buffer = Convert.FromBase64String(text);
using (var ms = new MemoryStream(buffer)) {
return DeSerializeFromStream<T>(ms);
}
} 20
21. SERIALIZE /DESERIALIZE FILE
public virtual void SerializeToFile<T>(T obj, String file, Int32 bufferSize =
1024) {
using (var fs = File.Open(file, FileMode.Create, FileAccess.Write)) {
using (var bs = new BufferedStream(fs, bufferSize)) {
SerializeToStream(obj, bs);
bs.Flush();
}
}
}
public virtual T DeSerializeFromFile<T>(String file, Int32 bufferSize) {
using (var fs = File.Open(file, FileMode.Open, FileAccess.Read,
FileShare.ReadWrite)) {
using (var bs = new BufferedStream(fs, bufferSize)) {
return DeSerializeFromStream<T>(bs);
}
}
}
21