Winify – Blame information for rev 15

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