目标:要序列化如下的泛型对象为byte[],并可以反序列化
List<ISyntaxErro> synerroList;
主要类定义如下:
public interface ISyntaxErro
{
ISwitch_DEV VerifySwitch { get;set;}
string Expressionstr { get;set;}
SYNTAXERROTYPE SyntaxErroType { get;set;}
string GetErroInfo();
}
[Serializable]
internal class SyntaxErro : ISyntaxErro
{
ISwitch_DEV m_VerifySwitch;
string m_Expressionstr;
public SyntaxErro(ISwitch_DEV _VerifySwitch, string _Expressionstr)
{
m_VerifySwitch = _VerifySwitch;
m_Expressionstr = _Expressionstr;
}
public ISwitch_DEV VerifySwitch { get { return m_VerifySwitch; } set { m_VerifySwitch = value; } }
public string Expressionstr { get { return m_Expressionstr; } set { m_Expressionstr = value; } }
public string GetErroInfo()
{
}
}
public interface ISubstation_DEV
{
int ID { get;}
string Name { get;}
}
public interface ISwitch_DEV
{
int ID { get;}
string Name { get;}
string ShortName { get;}
ISubstation_DEV Station { get;}
IConditionGroup HConditionGroups { get;set;}
IConditionGroup LConditionGroups { get;set;}
IConditionGroup HConditionGroups_our { get;set;}
IConditionGroup LConditionGroups_our { get;set;}
}
[Serializable]
internal class Substation_DEV : ISubstation_DEV
{
int m_id;
string m_name;
public Substation_DEV(int id, string name)
{
m_id = id;
m_name = name;
}
public int ID { get { return m_id; } }
public string Name { get { return m_name; } }
}
[Serializable]
internal abstract class Switch_DEV : ISwitch_DEV
{
int m_id;
string m_name;
string m_shortName;
ISubstation_DEV m_station;
[NonSerialized]
IConditionGroup m_HConditionGroups;
[NonSerialized]
IConditionGroup m_LConditionGroups;
[NonSerialized]
IConditionGroup m_HConditionGroups_our;
[NonSerialized]
IConditionGroup m_LConditionGroups_our;
public Switch_DEV(int id, string name, string shortName, ISubstation_DEV station)
{
m_id = id;
m_name = name;
m_shortName = shortName;
m_station = station;
}
public int ID { get { return m_id; } }
public string Name { get { return m_name; } }
public string ShortName { get { return m_shortName; } }
public ISubstation_DEV Station { get { return m_station; } }
public IConditionGroup HConditionGroups { get { return m_HConditionGroups; } set { m_HConditionGroups = value; } }
public IConditionGroup LConditionGroups { get { return m_LConditionGroups; } set { m_LConditionGroups = value; } }
public IConditionGroup HConditionGroups_our { get { return m_HConditionGroups_our; } set { m_HConditionGroups_our = value; } }
public IConditionGroup LConditionGroups_our { get { return m_LConditionGroups_our; } set { m_LConditionGroups_our = value; } }
}
序列化及反序列化方法(从其他地方借鉴并进行了简单修改):
public static byte[] SerializeToBuffer<T>(T obj)
{
try
{
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, obj);
stream.Position = 0;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Flush();
stream.Close();
return buffer;
}
catch (Exception ex)
{
throw new Exception("序列化失败,原因:" + ex.Message);
}
}
public static T DesrializeFromBuffer<T>(T obj, byte[] buffer)
{
try
{
obj = default(T);
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream(buffer);
obj = (T)formatter.Deserialize(stream);
stream.Flush();
stream.Close();
}
catch (Exception ex)
{
throw new Exception("反序列化失败,原因:" + ex.Message);
}
return obj;
}
经过使用,以上方法可行,特此记录