Winify – Blame information for rev 30

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