using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
[JsonConverter(typeof(JsonValueListConverter))]
public sealed class JsonValueList
this.Values = new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> Values { get; private set; }
class JsonValueListConverter : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(JsonValueList).IsAssignableFrom(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null)
var jsonValue = (existingValue as JsonValueList ?? new JsonValueList());
if (reader.TokenType != JsonToken.StartObject)
throw new JsonSerializationException("Invalid reader.TokenType " + reader.TokenType);
switch (reader.TokenType)
case JsonToken.PropertyName:
var key = reader.Value.ToString();
throw new JsonSerializationException(string.Format("Missing value at path: {0}", reader.Path));
var value = serializer.Deserialize<string>(reader);
jsonValue.Values.Add(new KeyValuePair<string, string>(key, value));
case JsonToken.EndObject:
throw new JsonSerializationException(string.Format("Unknown token {0} at path: {1} ", reader.TokenType, reader.Path));
throw new JsonSerializationException(string.Format("Unclosed object at path: {0}", reader.Path));
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var jsonValue = (JsonValueList)value;
writer.WriteStartObject();
foreach (var pair in jsonValue.Values)
writer.WritePropertyName(pair.Key);
writer.WriteValue(pair.Value);
public string appname { get; set; }
public string key { get; set; }
public List<JsonValueList> data { get; set; }
public string updateId { get; set; }
public string updateTS { get; set; }
public string creationUser { get; set; }
{ ""data1"" : ""10551296"", ""data2"" : ""TrainingIns"", ""data3"" : ""Completed""}
{ ""connectorType"" : ""webserver-to-appserver"", ""sourceUri"" : ""data4"", ""destinationUri"" : ""data5"", ""rails"" : ""N"", ""data6"" : ""null"" }
{ ""groupId"" : ""group1"", ""failbackAction"" : ""null"", ""normal"" : ""null"", ""failoverAction"" : ""null"", ""failbackAction"" : ""null"", ""failoverAction"" : ""null"", ""artifactId"" : ""mywebserver"", ""normalState"" : ""null"" }
{ ""instanceId"" : ""10551296abc"" }]
""updateTS"" : ""30-AUG-16 05.56.24.000000000 AM"" ,
""creationUser"" : ""APICall""
internal static void Test()
var jsonString = GetJson();
Console.WriteLine("Original JSON: ");
Console.WriteLine(jsonString);
var collection = JsonConvert.DeserializeObject<Update_DB>(jsonString);
var json2 = JsonConvert.SerializeObject(collection, Formatting.Indented);
Console.WriteLine("Deserialized and re-serialized JSON: ");
Console.WriteLine(json2);
string x = JsonConvert.SerializeObject(collection.data);
Console.WriteLine("\nResult of serializing collection.data: ");
public static void Main()
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);