public string Serialize(object graph, TextSerializationSettings settings = null)
        {
            if (graph == null)
            {
                return(null);
            }

            return(Newtonsoft.Json.JsonConvert.SerializeObject(graph, this.GetSerializerSettings(settings ?? _settings)));
        }
        public void Serialize(TextWriter writer, object graph, TextSerializationSettings settings = null)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            if (graph == null)
            {
                return;
            }

            var serializer = this.GetSerializer(settings);

            serializer.Serialize(writer, graph);
        }
Example #3
0
        private TextSerializationSettings GetSerializationSettings(HttpRequestHeaders headers)
        {
            if (headers == null)
            {
                return(null);
            }

            var behaviors      = this.GetHeaderValues(headers, "x-json-behaviors");
            var datetimeFormat = this.GetHeaderValue(headers, "x-json-datetime");
            var casing         = this.GetHeaderValue(headers, "x-json-casing");

            if ((behaviors == null || behaviors.Count == 0) && string.IsNullOrEmpty(datetimeFormat) && string.IsNullOrEmpty(casing))
            {
                return(null);
            }

            var settings = new TextSerializationSettings()
            {
                DateTimeFormat = datetimeFormat
            };

            if (!string.IsNullOrEmpty(casing) && Enum.TryParse <SerializationNamingConvention>(casing, true, out var naming))
            {
                settings.NamingConvention = naming;
            }

            if (behaviors != null && behaviors.Count > 0)
            {
                settings.Indented = behaviors.Contains("indented");

                if (behaviors.Contains("ignores:none"))
                {
                    settings.SerializationBehavior = SerializationBehavior.None;
                }
                else if (behaviors.Contains("ignores:null"))
                {
                    settings.SerializationBehavior = SerializationBehavior.IgnoreNullValue;
                }
                else if (behaviors.Contains("ignores:default"))
                {
                    settings.SerializationBehavior = SerializationBehavior.IgnoreDefaultValue;
                }
            }

            return(settings);
        }
        protected override object OnExecute(CommandContext context)
        {
            var graph = context.Parameter;

            if (graph == null)
            {
                return(null);
            }

            //如果输入参数是文本或流或文本读取器,则反序列化它并返回
            if (graph is string raw)
            {
                return(Serializer.Json.Deserialize <Dictionary <string, object> >(raw));
            }
            if (graph is System.Text.StringBuilder text)
            {
                return(Serializer.Json.Deserialize <Dictionary <string, object> >(text.ToString()));
            }
            if (graph is Stream stream)
            {
                return(Serializer.Json.Deserialize <Dictionary <string, object> >(stream));
            }
            if (graph is TextReader reader)
            {
                return(Serializer.Json.Deserialize <Dictionary <string, object> >(reader));
            }

            var settings = new TextSerializationSettings()
            {
                MaximumDepth     = context.Expression.Options.GetValue <int>(KEY_DEPTH_OPTION),
                Typed            = context.Expression.Options.GetValue <bool>(KEY_TYPED_OPTION),
                Indented         = context.Expression.Options.GetValue <bool>(KEY_INDENTED_OPTION),
                NamingConvention = context.Expression.Options.GetValue <SerializationNamingConvention>(KEY_CASING_OPTION),
            };

            var json = Serializer.Json.Serialize(graph, settings);

            if (json != null)
            {
                context.Output.WriteLine(json);
            }

            return(json);
        }