对于二进制序列化
欲了解更多信息,请查看BinaryFormatter。
这是一个可能的解决方案:
public void Serialize(Dictionary<int, UserSessionInfo> dictionary, Stream stream)
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(dictionary.Count);
foreach (var obj in dictionary)
{
writer.Write(obj.Key);
writer.Write(obj.Value);
}
writer.Flush();
}
public Dictionary<int, UserSessionInfo> Deserialize(Stream stream)
{
BinaryReader reader = new BinaryReader(stream);
int count = reader.ReadInt32();
var dictionary = new Dictionary<int, UserSessionInfo>(count);
for (int n = 0; n < count; n++)
{
var key = reader.ReadInt32();
var value = reader.ReadString();
dictionary.Add(key, value);
}
return dictionary;
}
但您仍然需要有 UserSessionInfo ToString() 转换器;
对于XML序列化
创建一个示例类 Session
public class Session
{
[XmlAttribute]
public int SessionID;
[XmlAttribute]
public UserSessionInfo SessionInfo;
}
如果您想将其序列化为XML
,则可以创建
XmlSerializer
XmlSerializer serializer = new XmlSerializer(
typeof(Session[]),
new XmlRootAttribute() { ElementName = "sessions" }
);
现在你可以序列化或反序列化了。
序列化:
serializer.Serialize(
stream,
dict.Select(kv => new Session(){SessionID = kv.Key, SessionInfo = kv.Info}).ToArray()
);
反序列化:
var deserialized = (
(Session[])serializer.Deserialize(stream)
).ToDictionary(i => i.id, i => i.info);
但您需要在 UserSessionInfo 中有 ToString() 方法才能将其存储在 XML 中。
XML 可能如下所示:
<sessions>
<session id='int_goes_here' value='string_goes_here'/>
</sessions>
希望这会有所帮助。