使用json

时间:2019-06-06 06:28:45

标签: c# json asp.net-core dynamic

我想用Json制作C#中的动态类。 我知道我可以反序列化转换json,但是我的问题是: 如果我知道json的样子(例如{ "id": "5", "name": "Example" },我可以使用obj.id或obj.name调用该值 但 我有一个带有一个属性Array的JSON,该属性在每个实例中可能有所不同。例如

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

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

那么我如何将这些不同的JSON转换为一个动态对象?

4 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

var jObj = JObject.Parse(jsonData);

jObj成为您的“一个动态对象”,以访问更多属性:

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

对于配置,您可以执行以下操作:

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

PS:我有类似的问题,您可以在JSON to object C# (mapping complex API response to C# object)处查看问题并回答https://stackoverflow.com/a/46118086/4794396

编辑: 您可能要映射配置,以将配置信息映射为.ToObject<Dictionary<string, object>>()之类的,因为它可以是任何东西。

答案 1 :(得分:0)

您可以使用这种方法,这对我来说效果很好。

    var vModel = JsonConvert.DeserializeObject<T>(JsonData, new IsDateTimeConverter { DateTimeFormat = "dd/mm/yyyy", culture = cultureInfo.InvariantCulture});

答案 2 :(得分:0)

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包含示例ServerURl,那么Json将基于property(Field name)转换对象,并且Category Time days将为null,反之亦然。您可以根据null检查哪个json到达

答案 3 :(得分:0)

        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();