using System.Collections.Generic;
using System.Runtime.Serialization;
using Newtonsoft.Json.Linq;
public static void Main()
""DocumentException"": null,
""TimestampExtraInfoPackages"": [
""Timestamp"": ""20090501163433360001"",
""TimestampPackages"": []
GetAllUnprintedItemsResponse upResponse = new GetAllUnprintedItemsResponse();
JsonConvert.PopulateObject(responseData, upResponse);
foreach (var kvp in upResponse.TimestampExtraInfoPackages.First().ExtraInfo)
Console.WriteLine(kvp.Key + ": " + kvp.Value);
public class KvpArrayToDictionaryConverter : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(IDictionary<string, string>).IsAssignableFrom(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
var dict = new Dictionary<string, string>();
var array = JArray.Load(reader);
foreach (var obj in array.Children<JObject>())
dict.Add((string)obj["Key"], (string)obj["Value"]);
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();
public class TimestampPackageDC
public string Timestamp { get; set; }
public string Company { get; set; }
public string ContactID { get; set; }
public string Area { get; set; }
public string PackageID { get; set; }
public class TimestampPackageExtraDC : TimestampPackageDC
[JsonConverter(typeof(KvpArrayToDictionaryConverter))]
public IDictionary<string, string> ExtraInfo { get; set; }
public class GetAllUnprintedItemsResponse
public TimestampPackageDC[] TimestampPackages { get; set; }
public TimestampPackageExtraDC[] TimestampExtraInfoPackages { get; set; }
namespace System.Runtime.Serialization
public class DataContractAttribute : Attribute {}
public class DataMemberAttribute: Attribute {}