/// <summary>
        /// Loads a package info from this file's content if possible
        /// </summary>
        /// <param name="logger">A logging interface to write parser errors to</param>
        /// <param name="result">The resulting package info if processing succeeded</param>
        /// <returns>True if the file has successfully been processed, false otherwise</returns>
        public static bool GetPackage(this FileDescriptor file, ILogSystem logger, out PackageMeta result)
        {
            try
            {
                JsonDocument document = new JsonDocument();
                using (Stream fs = file.Open(FileMode.Open, FileAccess.Read, FileShare.Read))
                    if (document.Load(fs))
                    {
                        result = new PackageMeta();
                        PropertyMapper.Assign(result, document, true, true);

                        return(true);
                    }
                    else if (logger != null)
                    {
                        foreach (string error in document.Errors)
                        {
                            logger.Error(error);
                        }
                    }
            }
            catch (Exception er)
            {
                if (logger != null)
                {
                    logger.Error(er.Message);
                }
            }
            result = null;
            return(false);
        }
Пример #2
0
        public bool TryParseValue(Type targetType, object value, out object result)
        {
            JsonNode node = (value as JsonNode);

            if (node != null && node.Type == JsonNodeType.Object)
            {
                JsonDocument settings = new JsonDocument();
                settings.AddAppend(null, node);

                result = new T();
                PropertyMapper.Assign(result, settings, true, true);

                return((result as T).IsValid);
            }
            else
            {
                result = null;
                return(false);
            }
        }