public void Deserialize__CanDeserializeXml() { var s = new FlexiXmlSerializationService(); var xml = @"<SimpleTestStruct nameProperty=""one,two,three"" valueProperty=""13"" />"; var mtc = s.Deserialize<SimpleTestStruct>(xml); Assert.AreEqual("one,two,three", mtc.NameProperty); Assert.AreEqual(13, mtc.ValueProperty); }
public void Serialize__CanSerializeObject() { var s = new FlexiXmlSerializationService(); var result = s.Serialize(DateTime.Now).DumpToString(); }
void TryResolveElementReference(FlexiXmlSerializationService.ResolveElementReferenceEventArgs e) { var configuration = e.DeserializationRootObject as DiagnosticsConfiguration; if(e.ReferenceType.IsIn("formatter", "bodyformatter")) { IFormatter result; if (configuration.Formatters.TryFindByName(e.ReferencedObjectName, out result)) { e.Handle(result); return; } } if(e.ReferenceType == "filter") { IFilter result = (from f in configuration.FilterDefinitions where f.Name == e.ReferencedObjectName select f).FirstOrDefault(); if(result == null) { var filter = new LazyFilterReference(); filter.Name = e.ReferencedObjectName; e.Handle(filter); return; } else { e.Handle(result); return; } } if (e.ReferenceType == "sink") { ISink result = (from f in configuration.SinkDefinitions where f.Name == e.ReferencedObjectName select f).FirstOrDefault(); if (result != null) { e.Handle(result); return; } } if (e.ReferenceType == "contextdatacollector") { var result = (from cdc in configuration.GlobalContextDataCollectors where cdc.Name == e.ReferencedObjectName select cdc).FirstOrDefault(); if(result != null) { e.Handle(result); return; } } }
public Entities.DiagnosticsConfiguration LoadConfiguration() { var doc = XDocument.Parse(configXml, LoadOptions.SetLineInfo); var serializationService = new FlexiXmlSerializationService(); serializationService.TypeLookupNamespaces.Add("SquaredInfinity.Diagnostics.ContextDataCollectors"); serializationService.TypeLookupNamespaces.Add("SquaredInfinity.Diagnostics.Entities"); serializationService.TypeLookupNamespaces.Add("SquaredInfinity.Diagnostics.Filters"); serializationService.TypeLookupNamespaces.Add("SquaredInfinity.Diagnostics.Formatters"); serializationService.TypeLookupNamespaces.Add("SquaredInfinity.Diagnostics.Sinks"); serializationService.TypeLookupNamespaces.Add("SquaredInfinity.Diagnostics.Sinks.File"); serializationService.TypeLookupNamespaces.Add("SquaredInfinity.Diagnostics.TypeDescriptors"); serializationService.KnownTypes.Add("FileSink", typeof(FileSink)); serializationService.KnownTypes.Add("SquaredInfinity.Diagnostics", typeof(DiagnosticsConfiguration)); serializationService.TryConvertStringToPropertyValue += (s, e) => TryConvertStringToPropertyValue(e); serializationService.TryResolveElementReference += (s, e) => TryResolveElementReference(e); return serializationService.Deserialize<Entities.DiagnosticsConfiguration>(doc); }
void TryConvertStringToPropertyValue(FlexiXmlSerializationService.ConvertStringToPropertyValueEventArgs e) { var configuration = e.DeserializationRootObject as DiagnosticsConfiguration; if (FilterType.IsAssignableFrom(e.DeclaringType) && LogLevelType.IsEqualTo(e.PropertyInfo.PropertyType)) { SeverityLevel result; if (configuration.SeverityLevels.TryFindByName(e.ValueAsString, out result)) { e.Handle(result); return; } } if(e.PropertyInfo.PropertyType == typeof(IFormatter)) { var formatter = new PatternFormatter(); formatter.Pattern = e.ValueAsString; e.Handle(formatter); return; } if(e.DeclaringType == typeof(DefaultArchiveStrategy) && e.PropertyInfo.Name == "TriggerOnFileSize") { string fileSizeAsString = null; int multiplier = 0; if (e.ValueAsString.EndsWith("GB")) { var str = e.ValueAsString; fileSizeAsString = str.Substring(0, str.Length - "KB".Length); multiplier = 1000000000; } else if(e.ValueAsString.EndsWith("MB")) { var str = e.ValueAsString; fileSizeAsString = str.Substring(0, str.Length - "MB".Length); multiplier = 1000000; } else if(e.ValueAsString.EndsWith("KB")) { var str = e.ValueAsString; fileSizeAsString = str.Substring(0, str.Length - "KB".Length); multiplier = 1000; } if (!fileSizeAsString.IsNullOrEmpty()) { long result = 0; if (long.TryParse(fileSizeAsString, out result)) { e.Handle(result * multiplier); } } } }