using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public class RawStringConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(string);
public override bool CanRead { get { return false; } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
return JRaw.Create(reader).ToString();
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
writer.WriteRawValue((string)value);
public string name { get; set; }
public string id { get; set; }
public string status { get; set; }
[JsonConverter(typeof(RawStringConverter))]
public string color { get; set; }
public static void Test()
var jsonString = GetJSON();
Console.WriteLine("\nInput JSON: ");
Console.WriteLine(jsonString);
var regex = new Regex(@"(colors\[)(.*)(\])");
var fixedJsonString = regex.Replace(jsonString,
m => string.Format(@"""{0}{1}{2}""", m.Groups[1].Value, m.Groups[2].Value.Replace("\"", "\\\""), m.Groups[3].Value));
Console.WriteLine("\nRegex fixed JSON: ");
Console.WriteLine(fixedJsonString);
using (var reader = new StringReader("[").Concat(new StringReader(fixedJsonString)).Concat(new StringReader("]")))
using (var jsonReader = new JsonTextReader(reader))
list = JsonSerializer.CreateDefault().Deserialize<List<RootObject>>(jsonReader);
var sb = new StringBuilder();
using (var textWriter = new StringWriter(sb))
foreach (var item in list)
textWriter.WriteLine(",");
using (var jsonWriter = new JsonTextWriter(textWriter) { QuoteName = false, Formatting = Formatting.Indented, CloseOutput = false })
JsonSerializer.CreateDefault().Serialize(jsonWriter, item);
var reserializedJson = sb.ToString();
Console.WriteLine("\nRe-serialized JSON: ");
Console.WriteLine(reserializedJson);
id: ""29573f59-85fb-4d06-9905-01a3acb2cdbd"",
id: ""29573f59-85fb-4d06-9905-01a3acb2cdbd"",
public static class Extensions
public static TextReader Concat(this TextReader first, TextReader second)
return new ChainedTextReader(first, second);
private class ChainedTextReader : TextReader
private TextReader first;
private TextReader second;
private bool readFirst = true;
public ChainedTextReader(TextReader first, TextReader second)
public override int Peek()
public override int Read()
int value = first.Read();
public override void Close()
protected override void Dispose(bool disposing)
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");
public class AssertionFailedException : System.Exception
public AssertionFailedException() : base() { }
public AssertionFailedException(string s) : base(s) { }
public static class Assert
public static void IsTrue(bool value)
public static void IsTrue(bool value, string message)
throw new AssertionFailedException(message ?? "failed");