我有一个类如下:
public class Client {
[JsonProperty("first_name")]
public string FirstName { get; set; }
[JsonProperty("last_name")]
public string LastName { get; set; }
}
使用下面的代码,我可以在字典中得到该类对象的属性和值:
var propertyValuesByName = client.GetType().GetProperties()
.Where(pi => pi.PropertyType == typeof(string))
.Select(pi => new { Val = (string) pi.GetValue(client), Name = pi.Name })
.ToDictionary(pi => pi.Name, pi => pi.Val);
所以字典包含属性名作为键,属性值作为值。但是我想要的是,获得字典,其中键将是对象JsonProperty名称而不是真实的属性名,意味着我想要“first_name”作为键而不是“FirstName”。我如何修改上面的代码来实现这一点?
3条答案
按热度按时间yruzcnhs1#
要在C#中获取JSON对象的属性名,可以使用nameof运算符。例如,给定以下JSON对象:
可以使用nameof运算符获取属性名称,如下所示:
注意,nameof运算符只适用于编译时常量,因此它不适用于动态生成的属性名。
或者,可以使用JsonPropertyAttribute指定JSON对象中的属性名称。例如:公共类人物
然后你可以使用反射来获得属性名,如下所示:var person =新人{姓名=“约翰·史密斯”,年龄= 30,城市=“纽约”};
9ceoxa922#
使用更多反射从自定义属性获取信息:
或者:
还要注意,如果对象只包含string,则可以直接反序列化为
Dictionary<string, string>
。wfsdck303#
我猜这和这个帖子中暴露的问题很相似:How to get Json Property name using reflection in C#
如果不强制要求您使用反射访问对象,您可以将Json反序列化为Dictionary〈string,string〉,如下所示:
然后使用values.Keys从其中获取键。希望这能有所帮助