using System.Collections;
using System.Collections.Generic;
using System.Text.Json.Serialization;
public int Id { get; set; }
public string Name { get; set; }
[JsonConverter(typeof(UnsafeRawJsonConverter))]
public string Data { get; set; }
public class RawJsonConverter : JsonConverter<string>
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
using var doc = JsonDocument.ParseValue(ref reader);
return doc.RootElement.GetRawText();
protected virtual bool SkipInputValidation => false;
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) =>
writer.WriteRawValue(value, skipInputValidation : SkipInputValidation);
public class UnsafeRawJsonConverter : RawJsonConverter
protected override bool SkipInputValidation => true;
public static void Test()
Test("{\"key\":\"value\"}");
Assert.Throws<JsonException>(()=> Test("Foo"));
public static void Test(string data)
var json = JsonSerializer.Serialize(thing, new JsonSerializerOptions { WriteIndented = true });
var thing2 = JsonSerializer.Deserialize<Thing>(json);
Console.WriteLine(thing2.Data);
Assert.AreEqual(data, thing2.Data);
public static void Main()
Console.WriteLine("Environment version: {0} ({1})", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription, Environment.Version);
Console.WriteLine("System.Text.Json version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");