C# 有没有办法通过指定类的类型来指定类?

C# 有没有办法通过指定类的类型来指定类?,c#,oracle,asp.net-core,C#,Oracle,Asp.net Core,有一个问题OracleDataReader可以按类型报告列名称、类型、和值 int i = № of column string name = reader.GetName(i) Type fieldType = reader.GetFieldType(i) reader.GetFieldValue<T>(i) 在GetFieldValue方法中而不是T,我指定了类String,比如 string result = reader.GetFieldValue<string&g

有一个问题
OracleDataReader
可以按类型报告列
名称
类型
、和

int i = № of column 
string name = reader.GetName(i)
Type fieldType = reader.GetFieldType(i)
reader.GetFieldValue<T>(i)
GetFieldValue
方法中而不是
T
,我指定了类
String
,比如

string result = reader.GetFieldValue<string>(i);

为什么要将所有这些值序列化为字符串数组?这可能就是您陷入这种类型混乱的原因。您似乎正在重新创建EntityFramework。为什么不直接用它呢?或者,如果您想要更轻量级的东西,请使用DavidG,我正在将数据库中的数据序列化为json字符串,以避免创建一堆dbo结构。默认情况下,Oracle 12.1中实现了此功能,但是我们有12.0如果
SerializeOracleValue
可以接受
对象,那么
读取器。GetFieldValue(i)
可能就足够了。泛型是一种编译时工具,所以它们在这里没有多大帮助。@Heinzi,它会起作用的。但是我首先获取对象,然后尝试解析它的字符串表示。如果我一开始就知道它的类型,并且可以用这种形式来选择它,那么为什么会发生这些事情呢。
string result = reader.GetFieldValue<string>(i);
var result = reader.GetFieldValue<fieldType.class>(i);

using (OracleDataReader reader = cmd.ExecuteReader()) {
      while (reader.Read()) {
        int count = reader.FieldCount;
        string[] rows = new string[count];

        for (int i = 0; i < count; i++) {
          rows[i] = String.Format(@"""{0}"":", reader.GetName(i));
          Type fieldType = reader.GetFieldType(i);

          if (reader.IsDBNull(i)) {
            DBNull nullValue = reader.GetFieldValue<DBNull>(i);
            rows[i] += SerializeOracleValue(nullValue);
          } else {
            switch (Type.GetTypeCode(fieldType)) {
              case TypeCode.Boolean:
                bool boolValue = reader.GetFieldValue<bool>(i);
                rows[i] += SerializeOracleValue(boolValue);
                break;
              case TypeCode.DBNull:
                DBNull nullValue = reader.GetFieldValue<DBNull>(i);
                rows[i] += SerializeOracleValue(nullValue);
                break;
              case TypeCode.Int32:
                int intValue = reader.GetFieldValue<int>(i);
                rows[i] += SerializeOracleValue(intValue);
                break;
              case TypeCode.Decimal:
                decimal decValue = reader.GetFieldValue<decimal>(i);
                rows[i] += SerializeOracleValue(decValue);
                break;
              case TypeCode.DateTime:
                DateTime dateValue = reader.GetFieldValue<DateTime>(i);
                rows[i] += SerializeOracleValue(new DateTimeOffset(dateValue));
                break;
              case TypeCode.String:
                string stringValue = reader.GetFieldValue<string>(i);
                rows[i] += SerializeOracleValue(stringValue);
                break;
              default:
                break;
            }
          }
        }
        Console.Out.WriteLine($"{{{String.Join(",", rows)}}}");
      }
      Console.Out.WriteLine("Empty");
    }