将键值对加载到c#类

时间:2014-12-15 15:56:23

标签: c# .net system.reflection

修改

存储过程返回以下数据:

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

我有一个类,其属性具有与数据库中“Name”字段匹配的自定义属性

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

    [CustomMapping(DBName="Member2",...)]
    public int MyName2{get; set;}
}

我有以下方法从DB填充类:

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

我想从DB为每个属性分配相应的值。上面的代码不能准确地执行此操作,因为每次因为for循环而调用LoadFromDataReader()时它将覆盖某些属性。

我该怎么做呢?

供参考: CustomObjectData.SafeRead从DB读取fieldName并将其分配给属性。

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。如果我的课程结构正确,这就变得微不足道了。

1 个答案:

答案 0 :(得分:0)

我认为你可以做点什么

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

如果所有这些都是字符串,你可以使用这样的东西,如果没有,你可以使用T来使这个通用。

我希望这会有所帮助