如何在c#中获取动态对象属性列表

时间:2015-04-02 20:57:07

标签: c# json dynamic

我有JSON对象,就像这样,它的动态, jsonInput =

{
    "CONTRATE":80,
    "SALINC":30,
    "RETAGE":67,
    "MARSTATUS":"single",
    "SPOUSEDOB":"1970-01-01",
    "VIEWOPTION":"pension"
}

我使用Newtonsoft.Json转换器将其转换为.NET动态对象:

var jsonDynamic = JsonConvert.DeserializeObject<dynamic>(jsonInput);

现在我有了动态的jsonDynamic .NET对象。

我现在如何获得它的属性? 这些应该是jsonDynamic.CONTRATE,jsonDynamic.SALINC等......

如何从jsonDynamic获取这些属性的名称?

感谢。

3 个答案:

答案 0 :(得分:0)

您可以创建一个代表您要反序列化的json的类,如下所示:

public class ClassName
{
    public int Contrate { get; set; }
    public int Salinc { get; set; }
    // Here you will place the rest of your properties.
}

然后只使用它:

var jsonDynamic = JsonConvert.DeserializeObject<ClassName>(jsonInput);

这样您就可以避免使用动态对象。

答案 1 :(得分:0)

var jobj = JObject.Parse(jsonInput);
dynamic jsonDynamic = jobj;

var dict = jobj.Children()
               .OfType<JProperty>()
               .ToDictionary(x => x.Name, x => x.Value);

int c = (int)dict["CONTRATE"];

或者如果您只想要属性名称

var propNames = jobj.Children()
                    .OfType<JProperty>()
                    .Select(x => x.Name)
                    .ToList();

答案 2 :(得分:-2)

您应该反序列化为Dictionary,然后您可以遍历Keys以获取属性名称

Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonInput);

您可以访问values.Keys以获取属性名称。