序列化嵌套对象(json.net)

时间:2019-05-04 09:33:05

标签: c# json json.net

我使用Json.Net序列化对象,但是现在我需要序列化嵌套对象

样本序列化对象:https://www.newtonsoft.com/json/help/html/SerializeObject.htm

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}

Account account = new Account
{
Email = "james@example.com",
Active = true,
CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
Roles = new List<string>
{
    "User",
    "Admin"
}
};

string json = JsonConvert.SerializeObject(account, Formatting.Indented);
 // {
 //   "Email": "james@example.com",
 //   "Active": true,
 //   "CreatedDate": "2013-01-20T00:00:00Z",
 //   "Roles": [
 //     "User",
 //     "Admin"
 //   ]
 // }

Console.WriteLine(json);

但是现在我需要一个像这样的Json:

 // {
 //   "Email": "james@example.com",
 //   "Active": true,
 //   "CreatedDate": "2013-01-20T00:00:00Z",
 //   "Roles": [
 //     "User"{
 //     "key": "value",
 //     "key": "value"
 //      }
 //     "Admin"
 //   ]
 // }

我如何构建这个Json?

2 个答案:

答案 0 :(得分:1)

您需要根据需要创建一个单独的/嵌套的类。 请找到下面的代码,如果您需要任何其他信息或对其进行更改,请告知我:

    private void Serialise()
    {

        //prepare static data
        List<User> users = new List<User>()
        {
            new User() {key = "value1"},
            new User() {key = "value2"}
        };

        Roles roles = new Roles();
        roles.Users = users;
        roles.Role = "Admin";

        Account account = new Account
        {
            Email = "james@example.com",
            Active = true,
            CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
            Roles = roles
        };

        //serialise
        string json = JsonConvert.SerializeObject(account, Formatting.Indented);
    }

    public class Account
    {
        public string Email { get; set; }
        public bool Active { get; set; }
        public DateTime CreatedDate { get; set; }
        public Roles Roles { get; set; }
    }

    public class Roles
    {
        public List<User> Users { get; set; }
        public string Role { get; set; }
    }

    public class User
    {
        public string key { get; set; }
    }

答案 1 :(得分:1)

public class Account
    {
        public string Email { get; set; }
        public bool Active { get; set; }
        public DateTime CreatedDate { get; set; }
        public IList<Roles> Roles { get; set; }
    }

    public class Roles
    {
        public Dictionary<string, string> User { get; set; }

    }

static void Main(string[] args)
        {
    Account account = new Account
            {
                Email = "james@example.com",
                Active = true,
                CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
                Roles = new List<Roles> { new Roles { User=new Dictionary<string, string>
                                            {
                    {"Key","value" },
                    {"key","value" }
                                            }
                },

                },
            };

                string json=JsonConvert.SerializeObject(account,Newtonsoft.Json.Formatting.Indented);
            Console.WriteLine(json);
            Console.ReadLine();

}