public void CanSerializeAndDeserializeXML() { var obj = new FieldDefinition(); var service = new DefaultXMLSerializationService(); var strValue = service.Serialize(obj); service.Deserialize(obj.GetType(), strValue); }
/// <summary> /// Resolves solution tool package. /// /// If .SolutionToolPackage is null, looking for NuGet package tags, and then into solution /// </summary> /// <returns></returns> protected virtual SolutionToolPackage ResolveSolutionToolPackage(IPackage package) { MetaPackTrace.Verbose("Resolving solution tool packages..."); SolutionToolPackage result = null; if (SolutionToolPackage == null) { MetaPackTrace.Verbose(".SolutionToolPackage is null. Switching to tags and solution itself"); // resolve from the tags var tags = string.IsNullOrEmpty(package.Tags) ? package.Tags.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries) : Enumerable.Empty <string>(); var packageId = ExtractTagValueByPrefix(tags, "metapack-toolid-"); var packageVersion = ExtractTagValueByPrefix(tags, "metapack-toolid-"); if (!string.IsNullOrEmpty(packageId)) { MetaPackTrace.Verbose(String.Format("Found tool. ToolId:[{0}] ToolVersion:[{1}]", packageId, packageVersion)); result = new SolutionToolPackage { Id = packageId, Version = packageVersion }; } else { MetaPackTrace.Verbose("Solution package tags don't have tool package defined. Switching to solution options."); var defaultSolutionPackagingService = new DefaultNuGetSolutionPackageService(); var solutionPackageFile = defaultSolutionPackagingService.FindSolutionPackageFile(package); var serializationService = new DefaultXMLSerializationService(); serializationService.RegisterKnownType(typeof(SolutionPackageBase)); MetaPackTrace.Verbose("Unpacking solution package..."); using (var streamReader = new StreamReader(solutionPackageFile.GetStream())) { var solutionFileContent = streamReader.ReadToEnd(); var xDoc = XDocument.Parse(solutionFileContent); var rootElementName = xDoc.Root.Name.LocalName; var defNamespace = xDoc.Root.Attribute("xmlns").Value; var genericXmlDoc = xDoc.ToString() .Replace( string.Format("<{0}", rootElementName), string.Format("<{0}", typeof(SolutionPackageBase).Name)) .Replace( string.Format("</{0}>", rootElementName), string.Format("</{0}>", typeof(SolutionPackageBase).Name)) .Replace(defNamespace, "http://schemas.datacontract.org/2004/07/MetaPack.Core.Packaging"); var typedPackage = serializationService.Deserialize( typeof(SolutionPackageBase), genericXmlDoc) as SolutionPackageBase; var packageIdFromPackage = ExtractAdditionalOption(typedPackage.AdditionalOptions, DefaultOptions.SolutionToolPackage.PackageId.Id); var packageVersionFromPackage = ExtractAdditionalOption(typedPackage.AdditionalOptions, DefaultOptions.SolutionToolPackage.PackageVersion.Id); if (!string.IsNullOrEmpty(packageIdFromPackage)) { MetaPackTrace.Verbose(string.Format("Found tool. ToolId:[{0}] ToolVersion:[{1}]", packageIdFromPackage, packageVersionFromPackage)); result = new SolutionToolPackage { Id = packageIdFromPackage, Version = packageVersionFromPackage }; } else { MetaPackTrace.Verbose("Cannot find any solution tool package options in SolutionPackage.AdditionalOptions"); } } } if (result == null) { throw new MetaPackException("Can't resolve solution tool package from .SolutionToolPackage, tags and solution package itself"); } } else { MetaPackTrace.Verbose("SolutionToolPackage is preefined by external input."); result = SolutionToolPackage; } return(result); }