? ? ? ? 本文介紹XML序列化和反序列化操作
? ? ? ? 本例子中被序列化的類(Devices)中有一個List,其元素類型為:DigitalInputInfo. 序列化以及反序列化都很簡單:
? ? ? ? 序列化:即把類的對象輸出到文件中。
? ? ? ? ???StreamWriter streamWriter = new StreamWriter(filePath);
? ? ? ? ? ? XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
? ? ? ? ? ? xmlSerializerNamespaces.Add("", "");
? ? ? ? ? ? XmlSerializer xmlSerializer = new XmlSerializer(sourceObj.GetType());
? ? ? ? ? ? xmlSerializer.Serialize(streamWriter, sourceObj, xmlSerializerNamespaces);
? ? ? ? ? ? streamWriter.Close();
? ? ? ? ? ? return true;
? ? ? ? 反序列化:從文件中加載生成類的對象。
? ? ? ? ?StreamReader streamReader = new StreamReader(filePath);
? ? ? ? XmlSerializer xmlSerializer = new XmlSerializer(type ?? typeof(T));
? ? ? ? obj = xmlSerializer.Deserialize(streamReader);
? ? ? ? streamReader.Close();?????
? ? ? ?具體效果以及代碼如下:? ?
一、效果如下
? ? ? ? 生成的序列化文件打開后如下:
二、具體代碼:
public static bool SaveToXml_FileName<T>(string filePath, T sourceObj)
{if (!string.IsNullOrEmpty(filePath) && sourceObj != null){try{StreamWriter streamWriter = new StreamWriter(filePath);XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();xmlSerializerNamespaces.Add("", "");XmlSerializer xmlSerializer = new XmlSerializer(sourceObj.GetType());xmlSerializer.Serialize(streamWriter, sourceObj, xmlSerializerNamespaces);streamWriter.Close();return true;}catch (Exception ex){Log.Error(ex);}}return false;
}
public static T LoadFromXml_FileName<T>(string filePath, Type type = null)
{object obj = null;try{StreamReader streamReader = new StreamReader(filePath);XmlSerializer xmlSerializer = new XmlSerializer(type ?? typeof(T));obj = xmlSerializer.Deserialize(streamReader);streamReader.Close();}catch (Exception ex){Log.Error(ex);}return (obj == null) ? default(T) : ((T)obj);
}
public class DigitalInputInfo{private bool isOn = false;public int Id { get; set; } = 0;public string Name { get; set; } = string.Empty;public int IndexByte { get; set; } = 0;public int IndexBit { get; set; } = 0;
}
public class Devices
{ public List<DigitalInputInfo> digitalInputInfos = new List<DigitalInputInfo>();
}main()
{
Devices instance = new Devices();
DigitalInputInfo info1 = new DigitalInputInfo()
{Id = 1,IndexByte = 1,IndexBit = 1
};
DigitalInputInfo info2 = new DigitalInputInfo()
{Id = 2,IndexByte = 3,IndexBit = 4
};
instance.digitalInputInfos.Add(info1);
instance.digitalInputInfos.Add(info2);
instance.Save();
}