Winify – Blame information for rev 61

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