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()); }