コード例 #1
0
        public static TJ Minify <TJ>(this TJ json, Json.MinifyOptions options) where TJ : JToken
        {
            if (json == null || options.HasFlag(Json.MinifyOptions.None))
            {
                return(json);
            }

            var removeEmpty   = options.HasFlag(Json.MinifyOptions.RemoveEmpty);
            var removeNulls   = removeEmpty || options.HasFlag(Json.MinifyOptions.RemoveNulls);
            var removePrivate = options.HasFlag(Json.MinifyOptions.RemovePrivate);

            if (json is JArray ja)
            {
                var minified = new JArray();

                foreach (var j in ja)
                {
                    var jmin = j.Minify(options);
                    var keep = !(removeNulls && jmin == null) && !(removeEmpty && j.IsEmpty());

                    if (keep)
                    {
                        minified.Add(j.Minify(options));
                    }
                }

                return(minified as TJ);
            }

            if (json is JObject jo)
            {
                var minified = new JObject();

                foreach (var p in jo.Properties())
                {
                    var pmin = p.Value.Minify(options);
                    var keep = !(removeNulls && pmin == null) && !(removeEmpty && pmin.IsEmpty()) && !(removePrivate && p.Name.StartsWith("_"));

                    if (keep)
                    {
                        minified[p.Name] = pmin;
                    }
                }

                return(minified as TJ);
            }

            return(json.DeepClone() as TJ);
        }
コード例 #2
0
 public static string ToString <TJ>(this TJ json, Newtonsoft.Json.Formatting formatting, Json.MinifyOptions options) where TJ : JToken
 => json.Minify(options).ToString(formatting);