Создать динамический объект в C # из JSON - PullRequest
1 голос
/ 06 июня 2019

Я хочу сделать из Dsonmamic класс в C # из Json. Я знаю, что вы можете десериализовать конвертировать JSON, но моя проблема: Если я знаю, как выглядит json (например, { "id": "5", "name": "Example" }, я могу вызвать значение с помощью obj.id или obj.name НО У меня есть JSON с одним свойством Array, которое может быть различным в каждом случае. Е.Г.

{
  "id": "5",
  "name": "Example",
  },
  "config": {
    "Time": "13:23",
    "Days": ["Monday", "Thuesday"]
}

или

{
  "id": "5",
  "name": "Example",
  },
  "config": {
    "ServerURL": "https://example.com",
    "Category": "API"
}

Так, как я могу преобразовать эти различные JSONs в ОДИН динамический объект?

Ответы [ 4 ]

1 голос
/ 06 июня 2019

Вы можете сделать что-то вроде:

var jObj = JObject.Parse(jsonData);

И jObj становится вашим «ОДНЫМ динамическим объектом» для доступа к следующим свойствам:

var idObject= jObj["id"].ToObject<string>();

Или для конфигурации, вы можете сделать:

var configInfo = jObj["config"].ToObject<Dictionary<string, string>>();

PS: у меня был похожий вопрос, вы можете проверить вопрос на JSON для объекта C # (отображение сложного ответа API на объект C #) и ответить https://stackoverflow.com/a/46118086/4794396

EDIT: Возможно, вы захотите отобразить конфигурацию для сопоставления вашей информации конфигурации с чем-то вроде .ToObject<Dictionary<string, object>>(), поскольку это может быть что угодно ..

0 голосов
/ 06 июня 2019
        dynamic o = new ExpandoObject();
        o.Time = "11:33";
        var n = Newtonsoft.Json.JsonConvert.SerializeObject(o);

        dynamic oa = Newtonsoft.Json.JsonConvert.DeserializeObject<ExpandoObject>(n);
        Console.Write(oa.Time);
        Console.Read();
0 голосов
/ 06 июня 2019
public class YourObject
{
   public string id;
   public string Example;
   public YourConfig config;
}
public class YourConfig
{
   public string Time;
   public string[] Days;
   public string ServerUrl;
   public string Category;
}

Json преобразует ваш объект на основе свойства (имени поля), если ваш json содержит примеры ServerURl и Category Time, дни будут нулевыми, и наоборот. Вы можете проверить на основе нулевого значения, какой json прибыл

0 голосов
/ 06 июня 2019

Вы можете использовать этот подход, он отлично сработал для меня.

    var vModel = JsonConvert.DeserializeObject<T>(JsonData, new IsDateTimeConverter { DateTimeFormat = "dd/mm/yyyy", culture = cultureInfo.InvariantCulture});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...