Материал из .Net Framework эксперт
Custom Serialization using ISerializable
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;
[Serializable]
class MyStringData : ISerializable {
public string dataItemOne, dataItemTwo;
public MyStringData() { }
private MyStringData(SerializationInfo si, StreamingContext ctx) {
dataItemOne = si.GetString("First_Item").ToLower();
dataItemTwo = si.GetString("dataItemTwo").ToLower();
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext ctx) {
// Fill up the SerializationInfo object with the formatted data.
info.AddValue("First_Item", dataItemOne.ToUpper());
info.AddValue("dataItemTwo", dataItemTwo.ToUpper());
}
}
[Serializable]
class MoreData {
public string dataItemOne, dataItemTwo;
[OnSerializing]
internal void OnSerializing(StreamingContext context) {
dataItemOne = dataItemOne.ToUpper();
dataItemTwo = dataItemTwo.ToUpper();
}
[OnDeserialized]
internal void OnDeserialized(StreamingContext context) {
dataItemOne = dataItemOne.ToLower();
dataItemTwo = dataItemTwo.ToLower();
}
}
class Program {
static void Main(string[] args) {
MyStringData sd = new MyStringData();
sd.dataItemOne = "some data.";
sd.dataItemTwo = "some more data";
Stream s = new FileStream("MyData.soap",
FileMode.Create, FileAccess.Write, FileShare.None);
SoapFormatter sf = new SoapFormatter();
sf.Serialize(s, sd);
s.Close();
s = File.OpenRead("MyData.soap");
sd = (MyStringData)sf.Deserialize(s);
Console.WriteLine("Item 1: {0}", sd.dataItemOne);
Console.WriteLine("Item 2: {0}", sd.dataItemTwo);
MoreData md = new MoreData();
md.dataItemOne = "1, 2, 3.";
md.dataItemTwo = "One more test...";
s = new FileStream("MoreData.soap",FileMode.Create, FileAccess.Write, FileShare.None);
sf = new SoapFormatter();
sf.Serialize(s, md);
s.Close();
s = File.OpenRead("MoreData.soap");
md = (MoreData)sf.Deserialize(s);
Console.WriteLine("Item 1: {0}", md.dataItemOne);
Console.WriteLine("Item 2: {0}", md.dataItemTwo);
}
}