Winify – Blame information for rev 38

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())
64 await stringWriter.WriteAsync(await xmlReader.ReadOuterXmlAsync());
65 }
30 office 66  
38 office 67 using (var stringReader = new StringReader(stringBuilder.ToString()))
68 {
69 servers =
70 (T)xmlSerializer
71 .Deserialize(stringReader);
72 }
73 }
30 office 74 }
75 }
76 catch (Exception exception)
77 {
78 return new SerializationFailure(exception, validationEventArgs);
79 }
80 finally
81 {
82 settings.ValidationEventHandler -=
83 XmlReaderSettingsValidationEventHandler;
84 }
85  
86 return new SerializationSuccess<T>(servers, validationEventArgs);
87 }
88  
89 public static async Task<SerializationState> Serialize<T>(T servers, string file, string name, string subset,
90 CancellationToken cancellationToken)
91 {
92 var xmlSerializer = new XmlSerializer(typeof(T));
93  
94 try
95 {
38 office 96 using (var memoryStream = new MemoryStream())
97 {
98 using (var xmlWriter =
99 XmlWriter.Create(memoryStream,
100 new XmlWriterSettings
101 {
102 Async = true,
103 Indent = true,
104 IndentChars = " ",
105 OmitXmlDeclaration = false
106 }))
107 {
108 await xmlWriter.WriteDocTypeAsync(name,
109 null,
110 null,
111 subset);
30 office 112  
38 office 113 xmlSerializer.Serialize(xmlWriter, servers);
30 office 114  
38 office 115 using (var fileStream =
116 await Miscellaneous.GetFileStream(file, FileMode.Create, FileAccess.Write,
117 FileShare.Write,
118 cancellationToken))
119 {
120 memoryStream.Position = 0L;
30 office 121  
38 office 122 await memoryStream.CopyToAsync(fileStream);
123 }
124 }
125 }
30 office 126 }
127 catch (Exception exception)
128 {
129 return new SerializationFailure(exception);
130 }
131  
132 return new SerializationSuccess<T>();
133 }
134  
135 #endregion
136 }
137 }