在.NET中,處理序列化的全局變量需要考慮以下幾點:
ISerializable接口,并重寫GetObjectData和ResolveUninitializedObject方法。[Serializable]
public class GlobalVariable : ISerializable
{
public int Value { get; set; }
protected GlobalVariable() { }
public GlobalVariable(SerializationInfo info, StreamingContext context)
{
Value = info.GetInt32("Value");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Value", Value);
}
public static GlobalVariable ResolveUninitializedObject(StreamingContext context)
{
return new GlobalVariable();
}
}
GlobalVariable globalVar = new GlobalVariable { Value = 42 };
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, globalVar);
byte[] serializedData = ms.ToArray();
}
BinaryFormatter類將字節數組或字符串反序列化為對象。byte[] serializedData = ...; // 從文件、網絡等來源獲取序列化數據
using (MemoryStream ms = new MemoryStream(serializedData))
{
BinaryFormatter formatter = new BinaryFormatter();
GlobalVariable globalVar = (GlobalVariable)formatter.Deserialize(ms);
}
注意:BinaryFormatter已被認為是不安全的,因為它可能導致反序列化攻擊。在實際項目中,建議使用其他序列化庫,如Json.NET、ProtoBuf或MessagePack。