JSON.net-将嵌套对象反序列化为单个列表

时间:2020-07-09 12:14:30

标签: c# json json.net

我正在尝试使用JSON.net反序列化对C#对象的JSON响应。
我在将嵌套对象转换为C#列表时遇到问题。
我在下面得到JSON响应。
我想将所有<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <span id="insertblank"> <button type="button" class="btn" id="custom-button">Insert Input</button> </span> <div class="col-md-12 form-group fillin-answer"> <!-- My PHP WHILE loop would actually be here, but for illustration, I have manually inserted the elements as below --> <!-- BEGIN INSERTED ELEMENTS --> <div class="blanksanswers" id="removeans1"> <label class="removeans1"> Input <span>1</span><span class="text-danger">*</span> <button type="button" class="btn btn-sm btn-danger remove" data-id="1"> Remove 1 Input </button> </label> <div class="input-group removeans1"> <input class="form-control" id="fillin_answer1" name="fillin_answer[]" value="some values"/> </div> </div> <!--END INSERTED ELEMENTS--> </div>下的节点放在C#中的单个variants中。
如何编辑反序列化器,以便可以对其进行反序列化?

List<Variant>

C#类:

{
  "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
    }
  }
}

2 个答案:

答案 0 :(得分:-1)

您可以采用的一种方法是将JSON .Parse()变成dynamic对象。

例如:

string jsonString = @"Your JSON String";

dynamic parsedJson = JValue.Parse(jsonString);

之后,您应该能够使用LINQ遍历dynamic对象并提取Variant

来源:

答案 1 :(得分:-1)

以下代码将解决您的问题:

  • 创建将保留您的SELECT slotguest.FK_SlotNo, Sum(CASE WHEN guest.vip = 1 THEN 1 ELSE 0 END) AS guest_count FROM guest INNER JOIN slotguest ON guest.GuestID = slotguest.FK_guest GROUP BY slotguest.FK_SlotNo; 的主类:
List
  • 创建定义public class JsonList { public List<MainListKeep> ListToKeep { get; set; } } 类项目类型的类:
JsonList
  • 创建定义public class MainListKeep { public string feature_id { get; set; } public string feature_code { get; set; } public string company_id{ get; set; } public string feature_type { get; set; } public string parent_id{ get; set; } ... ... ... ... public List<VariantsList> variants{ get; set; } } 项目类型的类:
variants

然后您使用以下方法反序列化:


public class VariantsList 
{
   public string variant_id { get; set; }
   public string variant { get; set; }
   public string description { get; set; }
   public string page_title { get; set; }
   ...
   ...
   ...
   ...
}
    

然后,您在JsonList jsonList = new JsonList(); jsonList = JsonConvert.DeserializeObject<JsonList>(YourJSONContentString); 对象中拥有所有JSON响应项目,可以根据需要使用它们。
与代码相关的变量名称必须与上面创建的类中相同相同。

相关问题