gpt4 book ai didi

c# - 将嵌套类转换为字典

转载 作者:太空狗 更新时间:2023-10-29 21:22:00 25 4
gpt4 key购买 nike

我想将嵌套类转换为漂亮的键/值字典,并保留每个属性的类名和嵌套路径,以便以后轻松搜索。

这是我的示例类:

var agreement = new Agreement
{
ID = 101,
Description = "Convert to dictionary",
Customer = new Customer
{
FirstName = "John",
LastName = "Smith",
Age = 30,
Address = new List<Address>()
{
new Address
{
Name = "Los Angeles 1",
ZipCode = 25437
},
new Address
{
Name = "New York 25",
ZipCode = 25441
}
}
}
};

这是我在字典中预期的键/值输出:

KEY                                    VALUE
Agreement.ID: 101
Agreement.Description: Convert to dictionary
Agreement.Customer.FirstName: John
Agreement.Customer.LastName: Smith
Agreement.Customer.Age: 30
Agreement.Customer.Address[0].Name: Los Angeles 1
Agreement.Customer.Address[0].ZipCode: 25437
Agreement.Customer.Address[1].Name: New York 25
Agreement.Customer.Address[1].ZipCode: 25441

有人知道我如何实现这一点吗?

最佳答案

(抱歉,我没有时间测试这个。)

您可以使用反射和递归编写解决方案。像这样的东西,在下面。

您需要添加空检查和其他退出情况,否则您将很快陷入无限循环。这只是为了帮助您入门。

public Dictionary<string, string> MapToDictionary(object source, string name)
{
var dictionary = new Dictionary<string, string>();
MapToDictionaryInternal(dictionary, source, name);
return dictionary;
}

private void MapToDictionaryInternal(
Dictionary<string, string> dictionary, object source, string name)
{
var properties = source.GetType().GetProperties();
foreach(var p in properties)
{
var key = name + "." + p.Name;
object value = p.GetValue(source, null);
Type valueType = value.GetType();

if (valueType.IsPrimitive || valueType == typeof (String))
{
dictionary[key] = value.ToString();
}
else if (value is IEnumerable)
{
var i = 0;
foreach (object o in (IEnumerable) value)
{
MapToDictionaryInternal(dictionary, o, key + "[" + i + "]");
i++;
}
}
else
{
MapToDictionaryInternal(dictionary, value, key);
}
}
}

这样调用它:

Dictionary<string, string> dictionary2 = MapToDictionary(agreement, "Agreement");

关于c# - 将嵌套类转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31314649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com