将键值对加载到 c# 类

本文关键字:加载 键值对 | 更新日期: 2023-09-27 18:34:13

>编辑:

存储过程返回以下数据:

|  Name   |   Value   |
|---------|-----------|
| Member1 | someValue | 
| Member2 | someValue |

我有一个类,其属性具有与数据库中的"名称"字段匹配的自定义属性

class example{
    [CustomMapping(DBName="Member1",...)]
    public string MyName1{get; set;}
    [CustomMapping(DBName="Member2",...)]
    public int MyName2{get; set;}
}

我有以下方法从数据库填充类:

public void LoadFromDataReader(IDataReader reader)
{
        Type type = this.GetType();
        PropertyInfo[] props = type.GetProperties();
        foreach (PropertyInfo property in props)
        {
            CustomMappingAttribute mappingAttribute = (CustomMappingAttribute)Attribute.GetCustomAttribute(property, typeof(CustomMappingAttribute));
            object val = null;
            if (property.GetType() == typeof(string))
            {
                val = CustomObjectData.SafeRead<string>(mappingAttribute.DBName, reader, string.Empty);
            }
            else
            {
                val = CustomObjectData.SafeRead<int>(mappingAttribute.DBName, reader, int.MinValue);
            }
            property.SetValue(property, val);
        }
}

我想从数据库中为每个属性分配其相应的值。上面的代码不会准确地做到这一点,因为每次调用 for 循环时都会覆盖一些属性LoadFromDataReader()

我该怎么做?

仅供参考:CustomObjectData.SafeRead 从数据库中读取字段名称并将其分配给属性。

SafeRead<T>(string fieldName, IDataReader reader, T defaultValue);

.

.

.

.

.

老问题:

我想创建一个从数据库填充的类。类成员及其值将从数据库中读取。

存储过程返回以下数据:

|  Name   |   Value   |
|---------|-----------|
| Member1 | someValue | 
| Member2 | someValue |

现在我希望我的类从存储过程中读取/加载以下结构:

class example{
    public string Member1{get; set;}
    public string Member2{get; set;}
}

将始终返回一行,并且存储过程可以返回任意数量的键/值对。

这可能吗?有没有更好的方法?

我想这样做,因为我会将这个类序列化为 JSON。如果我的类结构正确,这变得微不足道。

将键值对加载到 c# 类

我认为你可以做类似的事情

public class Example
    {
        public IEnumerable<string> Members { get; set; }
    }

如果它们都是字符串,你可以使用这样的东西,如果没有,你可以使用 T 来制作这个泛型。

我希望这有帮助