JsonReferenceConverter
Regenerates reference paths and correctly generates $ref properties.
using Newtonsoft.Json;
using System;
namespace NJsonSchema.Converters
{
public class JsonReferenceConverter : JsonConverter
{
[ThreadStatic]
private static bool _isWriting;
public override bool CanWrite => !_isWriting;
public override bool CanConvert(Type objectType)
{
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return serializer.Deserialize(reader, objectType);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JsonSchemaReferenceUtilities.UpdateSchemaReferencePaths(value, false, serializer.ContractResolver);
try {
_isWriting = true;
string data = JsonConvert.SerializeObject(value, serializer.Formatting);
data = JsonSchemaReferenceUtilities.ConvertPropertyReferences(data);
if (writer.WriteState == WriteState.Property)
writer.WriteRawValue(data);
else
writer.WriteRaw(data);
} finally {
_isWriting = false;
}
}
}
}