Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
871 views
in Technique[技术] by (71.8m points)

json.net - How do I output JSchema without the formatting?

This was really easy to do with the original JSON.NET package, you'd just pass Formatting.None to the ToString() method and you'd get a nice condensed output. Is there not a similar option for JSchema?

question from:https://stackoverflow.com/questions/66051556/how-do-i-output-jschema-without-the-formatting

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Given a JSchema schema, to get compact formatting, you can do:

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

Or

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

The latter could be made into an extension method, optionally taking a 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();
    }
}

And then you could do:

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

Demo fiddle here.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...