public INomadSerializer GetSerializer() { if (CustomSerializer != null) { return(CustomSerializer); } INomadSerializer serializer = null; var filter = GetFilter(); if (filter != null) { serializer = ResourceFactory.GetSerializer(filter); serializer.Format = ResourceFactory.GetFormat(filter.Version); } // need generic serializer? if (serializer == null) { serializer = new NomadResourceSerializer(); } return(serializer); }
public static INomadSerializer GetSerializer(ResourceFilter filter) { if (filter.Version == 1) { return(new NomadRmlSerializer()); } INomadSerializer serializer = GetSerializer(filter.Type); if (serializer == null) { Debug.WriteLine($"Could not create a serializer using resource filter '{filter.ToString()}'"); } return(serializer); }
public static ResourceFile Open(string filename, bool load = true) { var type = FileType.Binary; var flags = FileTypeFlags.None; var ext = Path.GetExtension(filename); switch (ext) { case ".rml": flags |= FileTypeFlags.Rml; break; case ".xml": type = FileType.Xml; break; } var isRml = flags.HasFlag(FileTypeFlags.Rml); var isXml = (type == FileType.Xml || isRml) && Utils.IsXmlFile(filename); INomadSerializer serializer = null; var valid = true; ResourceFilter filter = null; if (isXml) { serializer = new NomadXmlSerializer(); var xml = Utils.LoadXmlFile(filename); filter = GetFilter(xml.Root); if (filter != null) { // is there a serializer that requires external dependencies? var xmlSerializer = GetSerializer(filter) as INomadXmlFileSerializer; if (xmlSerializer != null) { serializer = xmlSerializer; } } } else { if (NomadFactory.GetBinaryInfo(filename, out NomadFileInfo info)) { serializer = NomadFactory.GetSerializer(info); filter = GetFilter(info); } // make sure it's not an empty file valid = info.IsValid; } ResourceFile result = null; if (valid) { result = new ResourceFile() { Type = type, CustomSerializer = serializer, CustomFilter = filter, }; if (load) { result.Load(filename); } } return(result); }