XmlSerializer.cs
5.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
using System;
using System.Collections;
using System.IO;
namespace Quiz.Utility
{
/// <summary>
/// XML对象序列化。
/// </summary>
public class XmlSerializer
{
static Hashtable serializers;
static XmlSerializer() { serializers = new Hashtable(); }
static System.Xml.Serialization.XmlSerializer GetXmlSerializer(Type type)
{
System.Xml.Serialization.XmlSerializer ser = (System.Xml.Serialization.XmlSerializer)serializers[type];
if (ser == null)
{
ser = new System.Xml.Serialization.XmlSerializer(type, new System.Xml.Serialization.XmlRootAttribute() { ElementName = "Body", Namespace = "" });
serializers[type] = ser;
}
return ser;
}
/// <summary>
/// 将对象序列化成xml字符串。
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static string Serialize(object o)
{
if (o == null) return null;
System.IO.MemoryStream ms = null;
try
{
ms = new System.IO.MemoryStream();
var xmlserializer = GetXmlSerializer(o.GetType());
xmlserializer.Serialize(ms, o, new System.Xml.Serialization.XmlSerializerNamespaces(new System.Xml.XmlQualifiedName[] { new System.Xml.XmlQualifiedName("", "") }));
string xml = System.Text.Encoding.UTF8.GetString(ms.GetBuffer());
ms.Close(); ms.Dispose(); ms = null;
return xml;
}
catch { return null; }
finally { if (ms != null) { ms.Close(); ms.Dispose(); } }
}
/// <summary>
/// 将xml文档反序列化成对象。
/// </summary>
/// <param name="type"></param>
/// <param name="xml"></param>
/// <returns></returns>
public static object Deserialize(Type type, string xml)
{
if (type == null || string.IsNullOrEmpty(xml)) return null;
System.IO.MemoryStream ms = null;
try
{
var xmlserializer = GetXmlSerializer(type);
ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml));
object o = xmlserializer.Deserialize(ms);
ms.Close(); ms.Dispose(); ms = null;
return o;
}
catch { return null; }
finally { if (ms != null) { ms.Close(); ms.Dispose(); } }
}
/// <summary>
/// 将对象序列化成xml字符串。
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static string SerializeGoole(object o)
{
if (o == null) return null;
System.IO.MemoryStream ms = null;
try
{
ms = new System.IO.MemoryStream();
var xmlserializer = GetXmlSerializerGoole(o.GetType());
xmlserializer.Serialize(ms, o, new System.Xml.Serialization.XmlSerializerNamespaces(new System.Xml.XmlQualifiedName[] { new System.Xml.XmlQualifiedName("", "") }));// (new System.Xml.XmlQualifiedName[] { new System.Xml.XmlQualifiedName("", "") }));
string xml = System.Text.Encoding.UTF8.GetString(ms.GetBuffer());
ms.Close(); ms.Dispose(); ms = null;
return xml.Replace("\0", "");
}
catch { return null; }
finally { if (ms != null) { ms.Close(); ms.Dispose(); } }
}
static System.Xml.Serialization.XmlSerializer GetXmlSerializerGoole(Type type)
{
System.Xml.Serialization.XmlSerializer ser = (System.Xml.Serialization.XmlSerializer)serializers[type];
if (ser == null)
{
ser = new System.Xml.Serialization.XmlSerializer(type, new System.Xml.Serialization.XmlRootAttribute() { ElementName = "urlset", Namespace = "" });
serializers[type] = ser;
}
return ser;
}
public static string Serializer<T>(object obj)
{
try
{
MemoryStream stream = new MemoryStream();
System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(typeof(T));
System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
settings.Indent = true;
settings.NewLineChars = "\r\n";
settings.Encoding = System.Text.Encoding.UTF8;
settings.IndentChars = " ";
//不生成声明头
settings.OmitXmlDeclaration = true;
//强制指定命名空间,覆盖默认的命名空间。
System.Xml.Serialization.XmlSerializerNamespaces namespaces = new System.Xml.Serialization.XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
using (System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(stream, settings))
{
//序列化对象
xml.Serialize(writer, obj, namespaces);
writer.Close();
}
stream.Position = 0;
StreamReader sr = new StreamReader(stream);
string str = sr.ReadToEnd();
sr.Dispose();
stream.Dispose();
return str;
}
catch (Exception e)
{
return "";
}
}
public static T Deserialize<T>(string xml)
{
try
{
using (StringReader sr = new StringReader(xml))
{
System.Xml.Serialization.XmlSerializer xmldes = new System.Xml.Serialization.XmlSerializer(typeof(T));
return (T)xmldes.Deserialize(sr);
}
}
catch (Exception e)
{
return default(T);
}
}
}
}