如何在没有格式化的情况下输出 JSchema?

How do I output JSchema without the formatting?

使用原始的 JSON.NET 包很容易做到这一点,您只需将 Formatting.None 传递给 ToString() 方法即可d 得到一个很好的压缩输出。 JSchema 没有类似的选项吗?

给定一个 JSchema schema,要获得紧凑的格式,您可以这样做:

var json = JsonConvert.SerializeObject(schema, Formatting.None);

using var sw = new StringWriter(CultureInfo.InvariantCulture);
using (var jsonWriter = new JsonTextWriter(sw) { Formatting = Formatting.None })
    schema.WriteTo(jsonWriter);
var json = sw.ToString();

后者可以做成扩展方法,可选地采用 JSchemaWriterSettings:

public static partial class JsonExtensions
{
    public static string ToString(this JSchema schema, Formatting formatting, JSchemaWriterSettings settings = default)
    {
        using var sw = new StringWriter(CultureInfo.InvariantCulture);
        using (var jsonWriter = new JsonTextWriter(sw) { Formatting = formatting })
            if (settings == null)
                schema.WriteTo(jsonWriter);
            else
                schema.WriteTo(jsonWriter, settings); // This overload throws if settings is null
        return sw.ToString();
    }
}

然后你可以这样做:

var unversionedSchema = schema.ToString(Formatting.None);
var versionedSchema = schema.ToString(Formatting.None, new JSchemaWriterSettings { Version = SchemaVersion.Draft7 } );

演示 fiddle here.