首页 > 解决方案 > C# - Json 反序列化具有子属性的对象

问题描述

我有以下json:

{
   "issue" : 
   {
      "id": 1,
      "project":
      {
         "id":1,
         "name":"name of project"
      }
   }
}

我正在尝试将此 json 反序列化为以下类:

public class Issue
{
    public int? id { get; set; }
    public int project_id { get; set; }
    public string project_name { get; set; }
}

有办法获取子属性并设置为父亲吗?

标签: c#jsonserializationattributes

解决方案


最简单的解决方案之一是转换为JObject并使用它从中创建所需的对象。

var jObject = JsonConvert.DeserializeObject<JObject>(text);

var issue = new Issue() {id = (int?)jObject["issue"]["id"], project_id = (int)jObject["issue"]["project"]["id"], project_name = (string)jObject["issue"]["project"]["name"]};

下面的代码做了提到的:

using System;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class Issue
{
    public int? id { get; set; }
    public int project_id { get; set; }
    public string project_name { get; set; }

    public override string ToString()
    {
        return "Id: " + id + " project Id: " + project_id + " project name : " + project_name;
    }
}


public class Program
{
    public static void Main()
    {
        var text = "{ \"issue\" :  { \"id\": 1, \"project\": { \"id\": 2, \"name\":\"name of project\" }}}";

        var jObject = JsonConvert.DeserializeObject<JObject>(text);

        var issue = new Issue() {id = (int?)jObject["issue"]["id"], project_id = (int)jObject["issue"]["project"]["id"], project_name = (string)jObject["issue"]["project"]["name"]};
        Console.WriteLine(issue);
    }
}

您可以在此处查看现场演示


推荐阅读