我有一个包含SortedList<string, Data>
作为私有字段的类,其中Data
是一个包含int
,DateTime
和Nullable<DateTime>
字段的简单自定义类。
public class CustomCollection
{
private SortedList<string, Data> _list;
...
}
现在我将我的类序列化,因此我可以在XML文件中编写其内容(即_list
字段的项目)或从现有XML文件加载数据。
我该怎么办?
我想我明白有两种方法可以序列化:第一种方法是将所有字段标记为可序列化,而第二种方法是实现IXmlSerializable
接口。如果我理解正确,何时可以使用这两种方式中的每一种?
答案 0 :(得分:4)
好的,您只需要使用[Serializable]属性来装饰您的类,它应该可以工作。但是你有一个实现IDictionary的SortedList,这些不能用IXMLSerializable序列化,所以需要做一些自定义看这里
但如果您将已排序列表更改为普通列表或未实现IDictionary的任何内容,则以下代码将起作用:-)将其复制到控制台应用程序并运行它。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Data d = new Data { CurrentDateTime = DateTime.Now, DataId = 1 };
Data d1 = new Data { CurrentDateTime = DateTime.Now, DataId = 2 };
Data d2 = new Data { CurrentDateTime = DateTime.Now, DataId = 3 };
CustomCollection cc = new CustomCollection
{List = new List<Data> {d, d1, d2}};
//This is the xml
string xml = MessageSerializer<CustomCollection>.Serialize(cc);
//This is deserialising it back to the original collection
CustomCollection collection = MessageSerializer<CustomCollection>.Deserialize(xml);
}
}
[Serializable]
public class Data
{
public int DataId;
public DateTime CurrentDateTime;
public DateTime? CurrentNullableDateTime;
}
[Serializable]
public class CustomCollection
{
public List<Data> List;
}
public class MessageSerializer<T>
{
public static T Deserialize(string type)
{
var serializer = new XmlSerializer(typeof(T));
var result = (T)serializer.Deserialize(new StringReader(type));
return result;
}
public static string Serialize(T type)
{
var serializer = new XmlSerializer(typeof(T));
string originalMessage;
using (var ms = new MemoryStream())
{
serializer.Serialize(ms, type);
ms.Position = 0;
var document = new XmlDocument();
document.Load(ms);
originalMessage = document.OuterXml;
}
return originalMessage;
}
}
}