Превращение JSON в класс - PullRequest
2 голосов
/ 26 мая 2020

Добрый день, я просто не могу обернуть это, я имею в виду этот JSON документ, но как я могу сделать это как класс?

JSON выглядит так :

{
    "name": "stacking",
    "id": "12345",
    "moreDetails" : {
         "new_item_0" : {
             "id": "abcdefg"
         },
         "new_item_1" : {
             "id": "hujklmn"
         },
         "new_item_n" : {
             "id": "opqrtsu"
         }
     }
}

Где «moreDetails» содержит бесконечное количество «new_item_n».

Я собираюсь использовать этот класс в качестве формата моей базы данных в MongoDB.

Я имею в виду следующий класс:

public string name;
public string id;
// beyond here I have no idea

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

Вы можете использовать Dictionary<string, class>:

public partial class Root
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("moreDetails")]
    public Dictionary<string, Item> MoreDetails { get; set; }
}

public class Item
{
    [JsonProperty("id")]
    public string Id { get; set; }
}

Итак, это:

var x = new Root
{
    Name = "stacking",
    Id = "1",
    MoreDetails = new Dictionary<string, Item> {
        {"new_item_0", new Item {Id = "itemId"}}
    }

};
JsonConvert.SerializeObject(x, Newtonsoft.Json.Formatting.Indented);

приводит к:

{
  "name": "stacking",
  "id": "1",
  "moreDetails": {
    "new_item_0": {
      "id": "itemId"
    }
  }
}
1 голос
/ 26 мая 2020

Ну, поскольку MovieDetails будет бесконечным, а c динамическим, это должен быть словарь. Так что-то вроде этого:

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

namespace Scratch
{
    class Program
    {
        class Thing
        {
            public string Name { get; set; }
            public string Id { get; set; }
            public Dictionary<string, Item> MoreDetails { get; set; }
         }

        class Item
        {
            public string Id { get; set; }
        }

        static void Main(string[] args)
        {
            var json = File.ReadAllText("f.json");
            var thing = JsonConvert.DeserializeObject<Thing>(json);

            Console.WriteLine(thing.Name);
        }
    }
}
1 голос
/ 26 мая 2020

Попробуйте использовать KeyValuePair, где ObjectType - это класс, описывающий объект, стоящий за вашим new_item_n

List<KeyValuePair<string,ObjectType>>

Или используйте словарь в качестве ответа Гуру Строма!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...