blob: 0453e9120610991aeae53ad3defdab7a7e3ec39d (
plain)
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
154
155
156
157
158
159
160
161
|
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Tango.Serialization
{
/// <summary>
/// Represents a data serializer for serializing data using standard xml serializer.
/// </summary>
public class XmlDataSerializer : IDataSerializer
{
/// <summary>
/// Serialize object to a file.
/// </summary>
/// <typeparam name="T">Type of specified object.</typeparam>
/// <param name="obj">The specified object.</param>
/// <param name="filePath">The full path to the file to write.</param>
public void SerializeToFile<T>(T obj, string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
SerializeToStream<T>(obj, fs);
}
}
/// <summary>
/// Serialize object to encrypted file.
/// </summary>
/// <typeparam name="T">Type of specified object.</typeparam>
/// <param name="obj">The specified object.</param>
/// <param name="filePath">The full path to the file to write.</param>
public void SerializeToEncryptedFile<T>(T obj, string filePath)
{
var plainText = SerializeToString(obj);
var cypherText = CryptographyHelper.Encrypt(plainText);
File.WriteAllText(filePath, cypherText);
}
/// <summary>
/// Serialize object to encrypted string.
/// </summary>
/// <typeparam name="T">Type of specified object.</typeparam>
/// <param name="obj">The specified object.</param>
public String SerializeToEncryptedString<T>(T obj)
{
var plainText = SerializeToString(obj);
var cypherText = CryptographyHelper.Encrypt(plainText);
return cypherText;
}
/// <summary>
/// Deserialize object from encrypted file.
/// </summary>
/// <typeparam name="T">Type of object to deserialize.</typeparam>
/// <param name="filePath">The full path of the data file.</param>
/// <returns>The resulting object.</returns>
public T DeserializeFromEncryptedFile<T>(string filePath)
{
var cypherText = File.ReadAllText(filePath);
var plainText = CryptographyHelper.Decrypt(cypherText);
return DeserializeFromString<T>(plainText);
}
/// <summary>
/// Deserialize object from encrypted string.
/// </summary>
/// <typeparam name="T">Type of object to deserialize.</typeparam>
/// <returns>The resulting object.</returns>
public T DeserializeFromEncryptedString<T>(string encyptedString)
{
var plainText = CryptographyHelper.Decrypt(encyptedString);
return DeserializeFromString<T>(plainText);
}
/// <summary>
/// Deserialize object from a file.
/// </summary>
/// <typeparam name="T">Type of object to deserialize.</typeparam>
/// <param name="filePath">The full path of the data file.</param>
/// <returns>The resulting object.</returns>
public T DeserializeFromFile<T>(string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
return DeserializeFromStream<T>(fs);
}
}
/// <summary>
/// Serialize object to stream.
/// </summary>
/// <typeparam name="T">Type of specified object.</typeparam>
/// <param name="obj">The specified object.</param>
/// <param name="st">The stream to write.</param>
public void SerializeToStream<T>(T obj, Stream st)
{
XmlSerializer f = XmlSerializer.FromTypes(new[] { typeof(T) })[0]; //Microsoft bug workaround.
f.Serialize(st, obj);
}
/// <summary>
/// Serialize object to string.
/// </summary>
/// <typeparam name="T">Type of specified object.</typeparam>
/// <param name="obj">The specified object.</param>
/// <returns></returns>
public String SerializeToString<T>(T obj)
{
XmlSerializer f = XmlSerializer.FromTypes(new[] { typeof(T) })[0]; //Microsoft bug workaround.
using (StringWriter textWriter = new StringWriter())
{
f.Serialize(textWriter, obj);
return textWriter.ToString();
}
}
/// <summary>
/// Deserialize object from stream.
/// </summary>
/// <typeparam name="T">Type of object to deserialize.</typeparam>
/// <param name="st">Stream to read from.</param>
/// <returns>The resulting object.</returns>
public T DeserializeFromStream<T>(Stream st)
{
XmlSerializer f = XmlSerializer.FromTypes(new[] { typeof(T) })[0]; //Microsoft bug workaround.
return (T)f.Deserialize(st);
}
/// <summary>
/// Deserialize object from string.
/// </summary>
/// <typeparam name="T">Type of specified object.</typeparam>
/// <param name="obj">The specified object.</param>
/// <returns></returns>
public T DeserializeFromString<T>(String str)
{
XmlSerializer f = XmlSerializer.FromTypes(new[] { typeof(T) })[0]; //Microsoft bug workaround.
using (TextReader reader = new StringReader(str))
{
return (T)f.Deserialize(reader);
}
}
/// <summary>
/// Returns the serializer full name.
/// </summary>
/// <returns></returns>
public override string ToString()
{
return SerializationHelper.GetSerializerName(this);
}
}
}
|