QuickImage – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Text;
5 using System.Threading;
6 using System.Threading.Tasks;
7 using System.Xml;
8 using System.Xml.Schema;
9 using System.Xml.Serialization;
10  
11 namespace QuickImage.Utilities.Serialization.XML
12 {
13 public static class Serialization
14 {
15 #region Public Methods
16  
17 public static async Task<SerializationState> Deserialize<T>(string file, string targetNamespace,
18 string schemeUri,
19 CancellationToken cancellationToken)
20 {
21 var xmlSerializer = new XmlSerializer(typeof(T));
22  
23 var validationEventArgs = new List<ValidationEventArgs>();
24  
25 void XmlReaderSettingsValidationEventHandler(object sender, ValidationEventArgs e)
26 {
27 validationEventArgs.Add(e);
28 }
29  
30 T servers;
31  
32 var settings = new XmlReaderSettings();
33  
34 try
35 {
36 settings.Async = true;
37 settings.DtdProcessing = DtdProcessing.Parse;
38 settings.ValidationType = ValidationType.Schema;
39  
40 settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
41 XmlSchemaValidationFlags.ProcessSchemaLocation |
42 XmlSchemaValidationFlags.ReportValidationWarnings |
43 XmlSchemaValidationFlags.ProcessIdentityConstraints;
44  
45 settings.Schemas = new XmlSchemaSet();
46  
47 settings.ValidationEventHandler += XmlReaderSettingsValidationEventHandler;
48  
49 settings.Schemas.Add(targetNamespace, schemeUri);
50  
51 using (var fileStream =
52 await Miscellaneous.GetFileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read,
53 cancellationToken))
54 {
55 using (var xmlReader = XmlReader.Create(fileStream,
56 settings))
57 {
58 var stringBuilder = new StringBuilder();
59  
60 using (var stringWriter = new StringWriter(stringBuilder))
61 {
62 while (await xmlReader.ReadAsync())
63 await stringWriter.WriteAsync(await xmlReader.ReadOuterXmlAsync());
64 }
65  
66 using (var stringReader = new StringReader(stringBuilder.ToString()))
67 {
68 servers =
69 (T)xmlSerializer
70 .Deserialize(stringReader);
71 }
72 }
73 }
74 }
75 catch (Exception exception)
76 {
77 return new SerializationFailure(exception, validationEventArgs);
78 }
79 finally
80 {
81 settings.ValidationEventHandler -=
82 XmlReaderSettingsValidationEventHandler;
83 }
84  
85 return new SerializationSuccess<T>(servers, validationEventArgs);
86 }
87  
88 public static async Task<SerializationState> Serialize<T>(T @object, string file, string name, string subset,
89 CancellationToken cancellationToken)
90 {
91 var xmlSerializer = new XmlSerializer(typeof(T));
92  
93 try
94 {
95 using (var memoryStream = new MemoryStream())
96 {
97 using (var xmlWriter =
98 XmlWriter.Create(memoryStream,
99 new XmlWriterSettings
100 {
101 Async = true,
102 Indent = true,
103 IndentChars = " ",
104 OmitXmlDeclaration = false
105 }))
106 {
107 await xmlWriter.WriteDocTypeAsync(name,
108 null,
109 null,
110 subset);
111  
112 xmlSerializer.Serialize(xmlWriter, @object);
113  
114 using (var fileStream =
115 await Miscellaneous.GetFileStream(file, FileMode.Create, FileAccess.Write,
116 FileShare.Write,
117 cancellationToken))
118 {
119 memoryStream.Position = 0L;
120  
121 await memoryStream.CopyToAsync(fileStream);
122 }
123 }
124 }
125 }
126 catch (Exception exception)
127 {
128 return new SerializationFailure(exception);
129 }
130  
131 return new SerializationSuccess<T>(@object);
132 }
133  
134 #endregion
135 }
136 }