using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public class Parsed_JSON {
public string label1 { get; set; }
public ICollection<Full_Result> label2 { get; set; }
public string label3 { get; set; }
public string label4 { get; set; }
[JsonConverter(typeof(ObjectToArrayConverter<Full_Result>))]
[JsonProperty(Order = 1)]
public IList<string> values { get; set; }
[JsonProperty(Order = 2)]
public float score { get; set; }
public class ObjectToArrayConverter<T> : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(T) == objectType;
static bool ShouldSkip(JsonProperty property)
return property.Ignored || !property.Readable || !property.Writable;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var type = value.GetType();
var contract = serializer.ContractResolver.ResolveContract(type) as JsonObjectContract;
throw new JsonSerializationException("invalid type " + type.FullName);
var list = contract.Properties.Where(p => !ShouldSkip(p)).Select(p => p.ValueProvider.GetValue(value));
serializer.Serialize(writer, list);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null)
var token = JArray.Load(reader);
var contract = serializer.ContractResolver.ResolveContract(objectType) as JsonObjectContract;
throw new JsonSerializationException("invalid type " + objectType.FullName);
var value = existingValue ?? contract.DefaultCreator();
foreach (var pair in contract.Properties.Where(p => !ShouldSkip(p)).Zip(token, (p, v) => new { Value = v, Property = p }))
var propertyValue = pair.Value.ToObject(pair.Property.PropertyType, serializer);
pair.Property.ValueProvider.SetValue(value, propertyValue);
public static void Test()
Parsed_JSON result = JsonConvert.DeserializeObject<Parsed_JSON>(JSON);
var newJson = JsonConvert.SerializeObject(result, Formatting.Indented);
Console.WriteLine("Deserialized and re-serialized {0}: ", result);
Console.WriteLine(newJson);
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: ");