Winify – Diff between revs 39 and 44

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