| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | 
							- namespace Universal;
 
- public class XmlFileHelper
 
- {
 
-     public static bool ReadFile<T>(string filePath, out T? output)
 
-     {
 
-         output = default;
 
-         if (string.IsNullOrEmpty(filePath))
 
-             return false;
 
-         if (!File.Exists(filePath))
 
-             return false;
 
-         try
 
-         {
 
-             using StreamReader sr = new(filePath);
 
-             XmlSerializer xz = new(typeof(T));
 
-             if (xz.Deserialize(sr) is not T temp)
 
-                 return false;
 
-             output = temp;
 
-         }
 
-         catch
 
-         {
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
-     public static bool WriteFile(string filePath, object input)
 
-     {
 
-         if (input == null)
 
-             return false;
 
-         if (string.IsNullOrEmpty(filePath))
 
-             return false;
 
-         try
 
-         {
 
-             FileInfo file = new(filePath);
 
-             if (!Directory.Exists(file.Directory!.FullName))
 
-                 Directory.CreateDirectory(file.Directory!.FullName);
 
-             using StreamWriter sw = file.CreateText();
 
-             sw.Write(XmlHelper.SerializeXml(input));
 
-         }
 
-         catch
 
-         {
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
- }
 
- public class XmlHelper
 
- {
 
-     public static string SerializeXml(object objectToConvert)
 
-     {
 
-         XmlDocument xmlDocument = new();
 
-         XmlSerializer xmlSerializer = new(objectToConvert.GetType());
 
-         using (MemoryStream xmlStream = new())
 
-         {
 
-             xmlSerializer.Serialize(xmlStream, objectToConvert);
 
-             xmlStream.Position = 0;
 
-             xmlDocument.Load(xmlStream);
 
-         }
 
-         return xmlDocument.InnerXml;
 
-     }
 
-     public static bool DeserializeXml<T>(string s, out T? output)
 
-     {
 
-         output = default;
 
-         try
 
-         {
 
-             using StreamReader sr = new(s, Encoding.UTF8);
 
-             XmlSerializer xz = new(typeof(T));
 
-             if (xz.Deserialize(sr) is not T t)
 
-                 return false;
 
-             output = t;
 
-         }
 
-         catch
 
-         {
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
- }
 
- /// <summary>
 
- /// Dictionary(支持 XML 序列化)
 
- /// </summary>
 
- /// <typeparam name="TKey">键类型</typeparam>
 
- /// <typeparam name="TValue">值类型</typeparam>
 
- [XmlRoot("XmlDictionary")]
 
- [Serializable]
 
- public class XmlDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable where TKey : notnull
 
- {
 
-     #region 构造函数
 
-     public XmlDictionary()
 
-     { }
 
-     public XmlDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary)
 
-     { }
 
-     public XmlDictionary(IEqualityComparer<TKey> comparer) : base(comparer)
 
-     { }
 
-     public XmlDictionary(int capacity) : base(capacity)
 
-     { }
 
-     public XmlDictionary(int capacity, IEqualityComparer<TKey> comparer) : base(capacity, comparer)
 
-     { }
 
-     #endregion 构造函数
 
-     #region IXmlSerializable Members
 
-     public XmlSchema? GetSchema() => null;
 
-     /// <summary>
 
-     ///     从对象的 XML 表示形式生成该对象(反序列化)
 
-     /// </summary>
 
-     /// <param name="xr"></param>
 
-     public void ReadXml(XmlReader xr)
 
-     {
 
-         if (xr.IsEmptyElement)
 
-             return;
 
-         var ks = new XmlSerializer(typeof(TKey));
 
-         var vs = new XmlSerializer(typeof(TValue));
 
-         xr.Read();
 
-         while (xr.NodeType != XmlNodeType.EndElement)
 
-         {
 
-             xr.ReadStartElement("Item");
 
-             xr.ReadStartElement("Key");
 
-             var key = (TKey)ks.Deserialize(xr)!;
 
-             xr.ReadEndElement();
 
-             xr.ReadStartElement("Value");
 
-             var value = (TValue)vs.Deserialize(xr)!;
 
-             xr.ReadEndElement();
 
-             Add(key, value);
 
-             xr.ReadEndElement();
 
-             xr.MoveToContent();
 
-         }
 
-         xr.ReadEndElement();
 
-     }
 
-     /// <summary>
 
-     ///     将对象转换为其 XML 表示形式(序列化)
 
-     /// </summary>
 
-     /// <param name="xw"></param>
 
-     public void WriteXml(XmlWriter xw)
 
-     {
 
-         var ks = new XmlSerializer(typeof(TKey));
 
-         var vs = new XmlSerializer(typeof(TValue));
 
-         foreach (var key in Keys)
 
-         {
 
-             xw.WriteStartElement("Item");
 
-             xw.WriteStartElement("Key");
 
-             ks.Serialize(xw, key);
 
-             xw.WriteEndElement();
 
-             xw.WriteStartElement("Value");
 
-             vs.Serialize(xw, this[key]);
 
-             xw.WriteEndElement();
 
-             xw.WriteEndElement();
 
-         }
 
-     }
 
-     #endregion IXmlSerializable Members
 
- }
 
 
  |