I am trying to deserialising a JSON response to C# objects using JSON.net.
I am having issues with converting nested objects to a C# list.
I get the JSON response below.
I want to put all the nodes under variants
in a single List<Variant>
in C#.
How can I edit my deserialiser so that it can be properly deserialised?
{
"feature_id": "48808",
"feature_code": "",
"company_id": "1",
"feature_type": "S",
"parent_id": "0",
"display_on_product": "Y",
"display_on_catalog": "N",
"display_on_header": "N",
"description": "",
"lang_code": "nl",
"prefix": "",
"suffix": "",
"categories_path": "30,149,161,218,219,220,221,222,483",
"full_description": "",
"status": "A",
"comparison": "Y",
"position": "8830",
"purpose": "find_products",
"feature_style": "text",
"filter_style": "checkbox",
"variants": {
"61719": {
"variant_id": "61719",
"variant": "CEE 230V\\/16A",
"description": "CEE 230V\\/16A",
"page_title": "",
"meta_keywords": "",
"meta_description": "",
"lang_code": "nl",
"feature_id": "48808",
"url": "",
"color": "",
"position": "0",
"seo_name": null,
"seo_path": null,
"image_pair": null
},
"61720": {
"variant_id": "61720",
"variant": "CEE 400V\\/16A",
"description": "CEE 400V\\/16A",
"page_title": "",
"meta_keywords": "",
"meta_description": "",
"lang_code": "nl",
"feature_id": "48808",
"url": "",
"color": "",
"position": "0",
"seo_name": null,
"seo_path": null,
"image_pair": null
},
"61721": {
"variant_id": "61721",
"variant": "CEE 400V\\/32A",
"description": "CEE 400V\\/32A",
"page_title": "",
"meta_keywords": "",
"meta_description": "",
"lang_code": "nl",
"feature_id": "48808",
"url": "",
"color": "",
"position": "0",
"seo_name": null,
"seo_path": null,
"image_pair": null
},
"61722": {
"variant_id": "61722",
"variant": "CEE 400V\\/63A",
"description": "CEE 400V\\/63A",
"page_title": "",
"meta_keywords": "",
"meta_description": "",
"lang_code": "nl",
"feature_id": "48808",
"url": "",
"color": "",
"position": "0",
"seo_name": null,
"seo_path": null,
"image_pair": null
}
}
}
C# class:
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
namespace CsFeature
{
public partial class Feature
{
[JsonProperty("feature_id")] public string FeatureId { get; set; }
[JsonProperty("feature_code")] public string FeatureCode { get; set; }
[JsonProperty("company_id")] public string CompanyId { get; set; }
[JsonProperty("feature_type")] public string FeatureType { get; set; }
[JsonProperty("parent_id")] public string ParentId { get; set; }
[JsonProperty("display_on_product")] public string DisplayOnProduct { get; set; }
[JsonProperty("display_on_catalog")] public string DisplayOnCatalog { get; set; }
[JsonProperty("display_on_header")] public string DisplayOnHeader { get; set; }
[JsonProperty("description")] public string Description { get; set; }
[JsonProperty("lang_code")] public string LangCode { get; set; }
[JsonProperty("prefix")] public string Prefix { get; set; }
[JsonProperty("suffix")] public string Suffix { get; set; }
[JsonProperty("categories_path")] public string CategoriesPath { get; set; }
[JsonProperty("full_description")] public string FullDescription { get; set; }
[JsonProperty("status")] public string Status { get; set; }
[JsonProperty("comparison")] public string Comparison { get; set; }
[JsonProperty("position")] public string Position { get; set; }
[JsonProperty("variants")] public List<Variant> Variants { get; set; }
}
public class Variant
{
[JsonProperty("variant_id")] public string VariantId { get; set; }
[JsonProperty("variant")] public string VariantVariant { get; set; }
[JsonProperty("description")] public string Description { get; set; }
[JsonProperty("page_title")] public string PageTitle { get; set; }
[JsonProperty("meta_keywords")] public string MetaKeywords { get; set; }
[JsonProperty("meta_description")] public string MetaDescription { get; set; }
[JsonProperty("lang_code")] public string LangCode { get; set; }
[JsonProperty("feature_id")] public string FeatureId { get; set; }
[JsonProperty("url")] public string Url { get; set; }
[JsonProperty("color")] public string Color { get; set; }
[JsonProperty("position")] public string Position { get; set; }
[JsonProperty("seo_name")] public object SeoName { get; set; }
[JsonProperty("seo_path")] public object SeoPath { get; set; }
[JsonProperty("image_pair")] public object ImagePair { get; set; }
}
public partial class Feature
{
public static Feature FromJson(string json)
{
return JsonConvert.DeserializeObject<Feature>(json, Converter.Settings);
}
public static void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
errorArgs.ErrorContext.Handled = true;
}
}
public static class Serialize
{
public static string ToJson(this Feature self)
{
return JsonConvert.SerializeObject(self, Converter.Settings);
}
}
public static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore,
Converters =
{
new IsoDateTimeConverter {DateTimeStyles = DateTimeStyles.AssumeUniversal}
},
Error = Feature.HandleDeserializationError
};
}
}