using Newtonsoft.Json.Linq;
public static void Main()
""fs_Unique_Form_Name"": {
""title"": ""Title Text"",
""description"": ""This is the description."",
""timeStamp"": ""2020-11-04:10.30.48""
var response = JsonConvert.DeserializeObject<FormResponse>(json);
Console.WriteLine("Stack ID: " + response.StackId);
Console.WriteLine("State ID: " + response.StateId);
Console.WriteLine("Time Stamp: " + response.TimeStamp);
Console.WriteLine("Title: " + response.FormDetail.Title);
Console.WriteLine("Description: " + response.FormDetail.Description);
Console.WriteLine("Code: " + response.FormDetail.Code);
[JsonProperty(PropertyName = "title")]
public string Title { get; set; }
[JsonProperty(PropertyName = "description")]
public string Description { get; set; }
[JsonProperty(PropertyName = "code")]
public string Code { get; set; }
[JsonConverter(typeof(FormResponseConverter))]
public class FormResponse
public FormDetail FormDetail { get; set; }
[JsonProperty(PropertyName = "stackId")]
public int StackId { get; set; }
[JsonProperty(PropertyName = "stateId")]
public int StateId { get; set; }
[JsonProperty(PropertyName = "timeStamp")]
public string TimeStamp { get; set; }
public class FormResponseConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(FormResponse);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JObject obj = JObject.Load(reader);
FormResponse response = new FormResponse();
serializer.Populate(obj.CreateReader(), response);
JProperty prop = obj.Properties().FirstOrDefault(p => p.Name.StartsWith("fs_"));
response.FormDetail = prop != null ? prop.Value.ToObject<FormDetail>(serializer) : null;
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();