Exemple #1
0
        internal void Serialize(JsonWriter writer, JsonSerializer serializer)
        {
            if (this.CanSerialize)
            {
                // ensure the value is converted to a primitive type or a collection of primitive types
                // that can be safely serialized.
                var value = OptionValueParser.GetSerializationValue(this.Value);

                // notify event handlers (if any) to pre-process the JSON value.
                value = OnSerializing(value);

                serializer.Serialize(writer, value, value?.GetType());
                OnSerialized(value);
            }
        }
        public static string SerializeToString(TAppOptions options, bool prettyFormat)
        {
            // Format the string similarly to the JSON format.
            var valueBuilder = new System.Text.StringBuilder();
            var separator    = prettyFormat ? Environment.NewLine : " ";

            foreach (var input in options.Inputs)
            {
                valueBuilder.Append($"\"{OptionValueParser.GetSerializationValue(input)}\"{separator}");
            }

            var printOptions = options.GetOptions().Where(o =>
                                                          o.Name != ApplicationOptions.InputsKey &&
                                                          o.Name != ApplicationOptions.OptionsKey &&
                                                          o.Name != ApplicationOptions.ProviderIdKey &&
                                                          o.Name != ApplicationOptions.VersionKey).OrderBy(o => o.SerializationName);

            foreach (var option in printOptions)
            {
                if (option.CanSerialize)
                {
                    var value = OptionValueParser.GetSerializationValue(option.Value);
                    if (value is ICollection collection)
                    {
                        foreach (var listValue in collection)
                        {
                            valueBuilder.Append($"--{option.Name} \"{listValue}\"{separator}");
                        }
                    }
                    else
                    {
                        value = value is bool?string.Empty : $" \"{value}\"";
                        valueBuilder.Append($"--{option.Name}{value}{separator}");
                    }
                }
            }

            return(valueBuilder.ToString());
        }