예제 #1
0
        //TODO 优化它

        #region Public 方法

        /// <inheritdoc/>
        public string Format(object obj, FormDataFormatOptions options = default)
        {
            var jobject = JObject.FromObject(obj);
            var kvs     = jobject.Children().Select(m =>
            {
                if (m is JProperty property)
                {
                    return(property);
                }
                return(null);
            }).Where(m => m != null);

            if (options.RemoveEmptyKey)
            {
                kvs = kvs.Where(m => !string.IsNullOrWhiteSpace(m !.Value.ToString()));
            }

            var items = options.UrlEncode
                            ? kvs.Select(m => $"{FormContentUtil.Encode(m!.Name)}={FormContentUtil.Encode(m!.Value.ToString())}")
                            : kvs.Select(m => $"{m!.Name}={m!.Value}");

            return(string.Join("&", items));
        }
        /// <inheritdoc/>
        public string Format(object obj, FormDataFormatOptions options = default)
        {
            if (obj is null)
            {
                return(string.Empty);
            }

            var jsonData = JsonSerializer.SerializeToUtf8Bytes(obj, _jsonSerializerOptions);

            using var jsonDocument = JsonDocument.Parse(jsonData, _jsonDocumentOptions);

            IEnumerable <JsonProperty> kvs = jsonDocument.RootElement.EnumerateObject();

            if (options.RemoveEmptyKey)
            {
                kvs = kvs.Where(m => !string.IsNullOrWhiteSpace(m.Value.ToString()));
            }

            var items = options.UrlEncode
                            ? kvs.Select(m => $"{FormContentUtil.Encode(m.Name)}={FormContentUtil.Encode(m.Value.ToString())}")
                            : kvs.Select(m => $"{m.Name}={m.Value}");

            return(string.Join("&", items));
        }