【发布时间】:2017-09-04 18:13:23
【问题描述】:
我有一个类需要任意长度的类型-值对列表。
例如,一个实例可能包含 { (string, "hello"), (int, 3) },而另一个实例可能包含 { (char, 'a') }。该类型只能是原始类型,我可以仅限于 int 和 string,但我希望可以包含 float、char 等以保持灵活性。
我需要序列化和反序列化这个类的实例。我首选的序列化是使用 System.Xml.Serialization.XmlSerializer 的 XML。
Tuple<Type, object>
不好,因为默认情况下元组和对象都没有序列化,所以我定义了一个自定义结构:
[Serializable]
public struct ObjectDataItem { public Type Type; public string Value; }
我的班级拥有一个 ObjectDataItems 列表(字符串对于 Value 来说很好,因为我猜无论如何某些类型转换是不可避免的)。
我的问题是如何反序列化 ObjectDataItem(特别是反序列化“Type”变量)?
我目前正在使用代码进行反序列化:
public static M LoadXML<M>(string fileName) where M : struct
{
if (File.Exists(fileName))
{
FileStream loadStream = new FileStream(fileName, FileMode.Open);
XmlSerializer serializer = new XmlSerializer(typeof(M));
M fileLoaded = (M)serializer.Deserialize(loadStream);
loadStream.Close();
return fileLoaded;
}
else throw new HException("File not found: {0}", fileName);
}
【问题讨论】:
-
看起来像 how-to-xml-serialize-a-type 的副本
标签: c# serialization