Winify – Blame information for rev 39

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