XmlTools.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Xml;
  8. using System.Xml.Serialization;
  9. namespace DbCommon.Function
  10. {
  11. public class XmlTools
  12. {
  13. public static string XmlSerialize<T>(T obj)
  14. {
  15. try
  16. {
  17. using (MemoryStream ms = new MemoryStream())
  18. {
  19. var setting = new XmlWriterSettings()
  20. {
  21. Encoding = new UTF8Encoding(false),
  22. Indent = true,
  23. };
  24. using (XmlWriter writer = XmlWriter.Create(ms, setting))
  25. {
  26. XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  27. ns.Add("", "");
  28. XmlSerializer xmlSearializer = new XmlSerializer(typeof(T));
  29. xmlSearializer.Serialize(new XmlWriterEE(writer), obj, ns);
  30. return Encoding.UTF8.GetString(ms.ToArray());
  31. }
  32. }
  33. }
  34. catch (Exception)
  35. {
  36. return null;
  37. }
  38. }
  39. public static T XmlDeserialize<T>(string xml)
  40. {
  41. try
  42. {
  43. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
  44. {
  45. using (XmlReader xr = XmlReader.Create(ms))
  46. {
  47. XmlSerializer xmlSearializer = new XmlSerializer(typeof(T));
  48. return (T)xmlSearializer.Deserialize(xr);
  49. }
  50. }
  51. }
  52. catch (Exception)
  53. {
  54. return default(T);
  55. }
  56. }
  57. }
  58. public class XmlWriterEE : XmlWriter
  59. {
  60. private XmlWriter baseWriter;
  61. public XmlWriterEE(XmlWriter w)
  62. {
  63. baseWriter = w;
  64. }
  65. //Force WriteEndElement to use WriteFullEndElement
  66. public override void WriteEndElement() { baseWriter.WriteFullEndElement(); }
  67. public override void WriteFullEndElement()
  68. {
  69. baseWriter.WriteFullEndElement();
  70. }
  71. public override void Close()
  72. {
  73. baseWriter.Close();
  74. }
  75. public override void Flush()
  76. {
  77. baseWriter.Flush();
  78. }
  79. public override string LookupPrefix(string ns)
  80. {
  81. return (baseWriter.LookupPrefix(ns));
  82. }
  83. public override void WriteBase64(byte[] buffer, int index, int count)
  84. {
  85. baseWriter.WriteBase64(buffer, index, count);
  86. }
  87. public override void WriteCData(string text)
  88. {
  89. baseWriter.WriteCData(text);
  90. }
  91. public override void WriteCharEntity(char ch)
  92. {
  93. baseWriter.WriteCharEntity(ch);
  94. }
  95. public override void WriteChars(char[] buffer, int index, int count)
  96. {
  97. baseWriter.WriteChars(buffer, index, count);
  98. }
  99. public override void WriteComment(string text)
  100. {
  101. baseWriter.WriteComment(text);
  102. }
  103. public override void WriteDocType(string name, string pubid, string sysid, string subset)
  104. {
  105. baseWriter.WriteDocType(name, pubid, sysid, subset);
  106. }
  107. public override void WriteEndAttribute()
  108. {
  109. baseWriter.WriteEndAttribute();
  110. }
  111. public override void WriteEndDocument()
  112. {
  113. baseWriter.WriteEndDocument();
  114. }
  115. public override void WriteEntityRef(string name)
  116. {
  117. baseWriter.WriteEntityRef(name);
  118. }
  119. public override void WriteProcessingInstruction(string name, string text)
  120. {
  121. baseWriter.WriteProcessingInstruction(name, text);
  122. }
  123. public override void WriteRaw(string data)
  124. {
  125. baseWriter.WriteRaw(data);
  126. }
  127. public override void WriteRaw(char[] buffer, int index, int count)
  128. {
  129. baseWriter.WriteRaw(buffer, index, count);
  130. }
  131. public override void WriteStartAttribute(string prefix, string localName, string ns)
  132. {
  133. baseWriter.WriteStartAttribute(prefix, localName, ns);
  134. }
  135. public override void WriteStartDocument(bool standalone)
  136. {
  137. baseWriter.WriteStartDocument(standalone);
  138. }
  139. public override void WriteStartDocument()
  140. {
  141. baseWriter.WriteStartDocument();
  142. }
  143. public override void WriteStartElement(string prefix, string localName, string ns)
  144. {
  145. baseWriter.WriteStartElement(prefix, localName, ns);
  146. }
  147. public override WriteState WriteState
  148. {
  149. get { return baseWriter.WriteState; }
  150. }
  151. public override void WriteString(string text)
  152. {
  153. baseWriter.WriteString(text);
  154. }
  155. public override void WriteSurrogateCharEntity(char lowChar, char highChar)
  156. {
  157. baseWriter.WriteSurrogateCharEntity(lowChar, highChar);
  158. }
  159. public override void WriteWhitespace(string ws)
  160. {
  161. baseWriter.WriteWhitespace(ws);
  162. }
  163. }
  164. }